我仍然是R的初学者,所以我希望这个问题不是多余的,但是我无法找到令人满意的答案。尽管this Question似乎非常相似,但我仍然想知道我的观察是否代表标准情况。当我尝试在包含NA的一列中分布三个唯一观察值时,使用函数tidyr::spread
会导致尴尬的行为。结果是一个带有三个新列的小标题(如预期的那样),但还有一个名为“ NA”的附加第四列,其中完全填充了NA。
这是我的示例数据框:
test <- data.frame("Country" = c("A", "A", "A", "A", "A", "A", "A", "A"),
"Column1" = c(1, 1, 1, 1, 1, 1, 2, 2),
"Column2" = c(3, 3, 3, 4, 4, 4, 5, 5),
"Column3" = c("B", "M", "F", "B", "M", "F", "B", NA),
"Column4" = c(50, 74, 31, 53, 79, 33, 51, NA))
test1 <- spread(test, key = "Column3", value = "Column4")
test1
当我的小标题包含缺失值时,这是正常现象吗?如果是这样,为什么?对于标准行为,创建完全填充缺失值的附加列对我来说很奇怪。还是我缺少明显的东西(可能)?
任何帮助将不胜感激!
答案 0 :(得分:1)
传播的行为符合预期,尽管NA
作为列名和数据帧中的值的重复出现可能使行为不清楚。让我们更改数据框以使用“ Column4”中的虚拟值999
:
test <- data.frame("Country" = c("A", "A", "A", "A", "A", "A", "A", "A"), "Column1" = c(1, 1, 1, 1, 1, 1, 2, 2), "Column2" = c(3, 3, 3, 4, 4, 4, 5, 5), "Column3" = c("B", "M", "F", "B", "M", "F", "B", 'NA'), "Column4" = c(50, 74, 31, 53, 79, 33, 51, 999))
Country Column1 Column2 Column3 Column4
1 A 1 3 B 50
2 A 1 3 M 74
3 A 1 3 F 31
4 A 1 4 B 53
5 A 1 4 M 79
6 A 1 4 F 33
7 A 2 5 B 51
8 A 2 5 NA 999
现在是传播操作:
test1 <- spread(test, key = "Column3", value = "Column4")
Country Column1 Column2 B F M NA
1 A 1 3 50 31 74 NA
2 A 1 4 53 33 79 NA
3 A 2 5 51 NA NA 999
传播已将999
值正确放置在新的“ NA”列中(同样,新的列名称取自“ Column3”中的旧值),并将该值与匹配原始数据帧中的值。由于999
在原始数据帧中仅出现一次,因此在新数据帧中只有1个匹配行,因此,新的“ NA”列中的所有其他行都用NA
填充(再次,这里有些令人困惑)。