R根据其他栏中是否存在结果创建新栏

时间:2018-12-19 20:04:00

标签: r

我的手指交叉了,你们中的一个(或多个)好人将能够为您提供帮助...

例如,假设我在R中有以下df。

ID <- as.factor (c(1:6))
Pop <- as.factor(c(1,0,1,0,0,0))
Jazz <- as.factor(c(1,0,0,1,1,0))
Classical <- as.factor(c(0,0,1,0,0,0))
Rap <- as.factor(c(1,1,1,0,1,0))
   df <- data.frame(ID, Pop, Jazz, Classical, Rap)

我基本上想创建以下内容...

ID <- as.factor (c(1:6))
Pop <- as.factor(c(1,0,1,0,0,0))
Jazz <- as.factor(c(1,0,0,1,1,0))
Classical <- as.factor(c(0,0,1,0,0,0))
Rap <- as.factor(c(1,1,1,0,1,0))
Music_1 <- c("Pop","Rap","Pop","Jazz","Jazz",NA)
Music_2 <- c("Jazz",NA,"Classical",NA,"Rap",NA)
Music_3 <- c("Rap",NA,"Rap",NA,NA,NA)
    df2 <- data.frame(ID, Pop, Jazz, Classical, Rap, Music_1, Music_2, Music_3)

,其中会检查每个ID的音乐偏好,然后将这些选择(使用相应列的标题)打印到带有连续编号标题(例如Music_1,Music_2,Music_3 ...)的新列中。

我尝试了几种方法来完成此任务,但是成功有限。实际的数据框更大,超过70列,因此我一直在尝试使用for循环,但很高兴提出其他建议。

如果不清楚,请告知我。预先感谢。

1 个答案:

答案 0 :(得分:0)

我们采用gather到'long'格式,filter在'val'为0的行中,按'ID'分组,创建一个序列列('ind'),{ {1}}为“宽”格式,然后通过“ ID”与原始数据结合(即使未指定,默认情况下也会选择要连接的公共列)

spread