假设我在数据框中有多个列,它们测量相同的概念,但使用不同的方法(例如,有多种智商测试,学生可以有任何一种他们,或根本没有)。我想将各种方法合并到一个列中(tidyr的明显用例)。tidyr ::与缺少数据收集na.rm
如果数据是这样的:
mydata <- data.frame(ID = 55:64,
age = c(12, 12, 14, 11, 20, 10, 13, 15, 18, 17),
Test1 = c(100, 90, 88, 115, NA, NA, NA, NA, NA, NA),
Test2 = c(NA, NA, NA, NA, 100, 120, NA, NA, NA, NA),
Test3 = c(NA, NA, NA, NA, NA, NA, 110, NA, 85, 150))
我自然要执行这样的事情(请注意,我用na.rm = TRUE,以没有很多很多的NA在我的数据设定得到自己行):
library(tidyr)
tests <- gather(mydata, key=IQSource, value=IQValue, c(Test1, Test2, Test3), na.rm = TRUE)
tests
给予我:
ID age IQSource IQValue 1 55 12 Test1 100 2 56 12 Test1 90 3 57 14 Test1 88 4 58 11 Test1 115 15 59 20 Test2 100 16 60 10 Test2 120 27 61 13 Test3 110 29 63 18 Test3 85 30 64 17 Test3 150
问题是我有一个学生(ID = 62),其中任何一个都没有任何智商分数,我不想丢失她的其他数据(ID和年龄的数据列)。
有没有办法在tidyr中区分是的,我想删除NA,我至少在一列中收集数据,但同时要防止所有的数据丢失采集列NA)
我选择这个作为正确的答案b/c简单,坚持tidyverse,并扩大超出原来的要求。所有给出的答案都很棒,但是很有帮助!谢谢大家! – Joy