首页 > 解决方案 > 使用 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.

标签: rdataframedplyr

解决方案


这是一种可能可行的方法:

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链式sapplyapply函数的输出是您要查找的字符串的向量,其长度等于df. 因此,您可以将其设置为新列。希望这是有道理的。


推荐阅读