【发布时间】:2017-08-21 21:58:23
【问题描述】:
如果没有好的大数据包,我无法执行此示例。我提供了一个简单的示例,但实际上我是针对具有超过 400 万行和 150 列的表执行此操作的。
library(stringr)
a<-c(1,"1_2_3_1_2_3_1")
b<-c(1,"2_2_2_3_3_3_3")
c<-c(1,"3_3_3_3_3_3_3")
df<-rbind(a,b,c)
m1<-str_split_fixed(df[,2], "_", 7)
a<-list()
for(i in 1:nrow(m1)){
a[[i]]<-sort(unique(m1[i,]))
df[i,2]<-paste(a[[i]],collapse=" ")}
我怎样才能使这更快?我知道 dplyr 可以帮助我,但我发现只是根据行而不是列删除的建议。
预期的结果是 df。情况是我需要删除 df [,1] 的重复状态才能返回 df [,1] 的唯一状态。在我的真实情况下,我的状态是文字而不是数字
提前致谢
【问题讨论】:
-
请解释您期望的结果并提供您的 3 行示例的预期结果。
c<-c(1,"3_3_3_3_3_3_3")返回一个字符向量,df<-rbind(a,b,c)创建一个字符矩阵。 -
所以这个,
df[,2] <- sapply(strsplit(df[,2], '_'), function(i) paste0(unique(i), collapse = '_'))? -
@Sotos 更改为
collapse = " "并将其作为答案发布,以便将问题标记为已回答。 -
预期结果是df。情况是我需要删除 df [,1] 的重复状态才能返回 df [,1] 的唯一状态。在我的真实情况下,我的状态是文字而不是数字