有条件地连接字符串

时间:2017-03-07 12:43:27

标签: r conditional string-concatenation

我有一个包含这5列的数据框

val1 val2 val3 val4 val5
1    0    3    0    5
0    0    0    0    5
1    2    0    0    0

我试图用条件连接创建一个新列(结果不能连接零)

val6
1,3,5
5
1,2

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我认为这是重复的。然而,无法找到一个如此回答。

我们可以逐行使用apply并删除值为0的元素,并粘贴以逗号分隔的剩余值。

df$val6 <- apply(df, 1, function(x) paste0(x[x!=0], collapse = ","))
df

#  val1 val2 val3 val4 val5  val6
#1    1    0    3    0    5 1,3,5
#2    0    0    0    0    5     5
#3    1    2    0    0    0   1,2

另一种选择可能是使用by

df$val6 <- by(df, 1:nrow(df), function(x) paste0(x[x!=0], collapse = ","))

答案 1 :(得分:0)

我们可以尝试使用replacegsub

gsub("NA\\s*|\\s*NA|NA+", "", do.call(paste,replace(df1, df1==0, NA)))
#[1] "1 3 5" "5"     "1 2"