r - 使用 dplyr 创建字符串列表
问题描述
我想在 R 中创建一个新列,根据几列是否标记为“X”来连接几个字符串。
这是我拥有的数据:
Column1 Column2 Column3 Column4
X X X
X X X
X X
如果输入了“X”,我想创建一个新的 Column5,其中将包括以下各项:
Column1: 'Texas'
Column2: 'California'
Column3: 'New Jersey'
Column4: 'Oklahoma'
我可以在 R 中使用相当多的代码来做到这一点,但我认为使用dplyr
.
解决方案
这是一种可能可行的方法:
df = data_frame(c1='x', c2=c('x', NA, NA), c3=c('x', 'x', NA), c4=c(NA, 'x', 'x'))
values = c('TX', 'CA', 'NJ', 'OK')
df$c5 = sapply(df, function(x) !is.na(x)) %>%
apply(MARGIN=1, FUN=function(x) paste(values[x], collapse=', '))
df
# A tibble: 3 x 5
c1 c2 c3 c4 c5
<chr> <chr> <chr> <chr> <chr>
1 x x x NA Texas, California, New Jersey
2 x NA x x Texas, New Jersey, Oklahoma
3 x NA NA x Texas, Oklahoma
循环通过sapply
数据框检查值是否丢失,以获得TRUE
/FALSE
值的矩阵。然后循环该矩阵,将T
/值的行传递给索引和粘贴结果F
的匿名函数。values
链式sapply
和apply
函数的输出是您要查找的字符串的向量,其长度等于df
. 因此,您可以将其设置为新列。希望这是有道理的。