传播用户报告变量到多列

  • 本文关键字:变量 用户 报告 传播 r
  • 更新时间 :
  • 英文 :


我试图将几个用户填充的变量分开为多列。我试图使用差异功能,但是我遇到了一些问题。例如,数据库看起来像这样:

SubjID         Input1        Input2
1              Banana        NA
2              Apple         NA
3              NA            Banana
4              Apple         Banana

我试图使它看起来像这样:

SubjID         Input1        Input2    Banana   Apple
1              Banana        NA        Banana   NA
2              Apple         NA        NA       Apple
3              NA            Banana    Banana   Na
4              Apple         Banana    Banana   Apple

我可以在tidyr中使用涂抹函数进行分开的输入1,但问题带有输入2。我能够将其传播,但是我不能将这些值放入先前创建的香蕉列中,而是将创建两个香蕉列,我无法弄清楚如何正确合并。有什么方法可以正确地将其排序吗?我是R的新手,在数据库的这一方面遇到了很多麻烦。对于我来说,有太多选择可以分散地说香蕉和苹果,我真的不确定如何做到这一点。

我们可能需要先进行gather,然后再进行spread

library(dplyr)
library(tidyr)
df1 %>% 
  gather(key, val, -SubjID, na.rm = TRUE) %>% 
  mutate(key1 = val) %>% 
  select(-key) %>% spread(key1, val) %>%
  left_join(df1, ., by = 'SubjID')
#  SubjID Input1 Input2 Apple Banana
#1      1 Banana   <NA>  <NA> Banana
#2      2  Apple   <NA> Apple   <NA>
#3      3   <NA> Banana  <NA> Banana
#4      4  Apple Banana Apple Banana

数据

df1 <- structure(list(SubjID = 1:4, Input1 = c("Banana", "Apple", NA, 
"Apple"), Input2 = c(NA, NA, "Banana", "Banana")), .Names = c("SubjID", 
 "Input1", "Input2"), class = "data.frame", row.names = c(NA, 
-4L))

尝试以下操作:假设您的data.frame称为 dat

dat$Banana <- ifelse(dat$Input1 == "Banana" | dat$Input2 == "Banana", "Banana", NA)
dat$Apple <- ifelse(dat$Input1 == "Apple" | dat$Input2 == "Apple", "Apple", NA)

例如,如果df$Input1df$Input2是" Banana",则第一行检查行划分;如果是这样,它将"Banana"放在Banana列中,否则将NA

放置

最新更新