在R中合并而不在数据集之间复制同名列
我有两个数据帧在R中合并而不在数据集之间复制同名列,r,merge,R,Merge,我有两个数据帧 x <- data.frame(ID=c("A","B","C","D"),y=c(1,2,3,4),animal=c("squid","shark", NA, NA)) 我想要的是输出仅仅是 ID y animal 1 A 1 squid 2 B 2 shark 3 C 3 dog 4 D 4 cat 有很多方法可以将其与循环相结合,创建一个最终列,其中抛出不完整的数据,只保留完整的数据,但我很好奇,是否有一些方便的函数可以用一行代码解决这个问
x <- data.frame(ID=c("A","B","C","D"),y=c(1,2,3,4),animal=c("squid","shark", NA, NA))
我想要的是输出仅仅是
ID y animal
1 A 1 squid
2 B 2 shark
3 C 3 dog
4 D 4 cat
有很多方法可以将其与循环相结合,创建一个最终列,其中抛出不完整的数据,只保留完整的数据,但我很好奇,是否有一些方便的函数可以用一行代码解决这个问题
人们似乎也问过类似的问题,但我发现的大多数帖子更感兴趣的只是重命名两个数据集之间的共享列名,以避免.x和.y结果合并生成库(dplyr)
library(dplyr)
x %>%
left_join(y,by=c("ID","y")) %>%
mutate(animal = coalesce(animal.x,animal.y))
ID y animal.x animal.y animal
1 A 1 squid <NA> squid
2 B 2 shark <NA> shark
3 C 3 <NA> dog dog
4 D 4 <NA> cat cat
y <- data.frame(ID=c("A","B","C","D"),y=c(1,2,3,4),animal=c(NA,NA, "dog", "cat"),stringsAsFactors = F)
y <- data.frame(ID=c("A","B","C","D"),y=c(1,2,3,4),animal=c(NA,NA, "dog", "cat"),stringsAsFactors = F)
x%>%
左联合(y,by=c(“ID”,“y”))%>%
突变(动物=结合(动物x,动物y))
ID y动物。x动物。y动物
一条一条的鱿鱼
2 B 2鲨鱼
3 C 3狗
4d4猫
这回答了你的问题吗?这看起来很相似,但是当我运行它并在select(,-var2.x,-var2.y):未使用的参数(-var2.x,-var2.y)
中返回错误消息error时,第一个dplyr答案似乎不起作用。请注意,如果您想使用merge()
,您可以这样做foo@762第一个dplyr
答案有效,如果您使用数据中存在的列名,即从var2.x
和var2.y
更改为animal.x
和animal.y
@jazzurro我认为分号不起作用,因为我仍然在动物中得到NA行(这很奇怪),但是当它在一条单独的线上时,它不知怎么的工作了。你注意到同样的问题了吗?嗯,我不知怎么得到了一个非常不同的输出,它只是创建了第三个动物列,它没有完成数据。是你的数据字符串或因子吗?啊,我明白了。我固定到字符串,并查看输出是否更新
ID y animal
1 A 1 <NA>
2 B 2 <NA>
3 C 3 dog
4 D 4 cat
#example code
merge(x, y, by = "ID")
#output
ID y.x animal.x y.y animal.y
1 A 1 squid 1 <NA>
2 B 2 shark 2 <NA>
3 C 3 <NA> 3 dog
4 D 4 <NA> 4 cat
ID y animal
1 A 1 squid
2 B 2 shark
3 C 3 dog
4 D 4 cat
library(dplyr)
x %>%
left_join(y,by=c("ID","y")) %>%
mutate(animal = coalesce(animal.x,animal.y))
ID y animal.x animal.y animal
1 A 1 squid <NA> squid
2 B 2 shark <NA> shark
3 C 3 <NA> dog dog
4 D 4 <NA> cat cat
y <- data.frame(ID=c("A","B","C","D"),y=c(1,2,3,4),animal=c(NA,NA, "dog", "cat"),stringsAsFactors = F)
y <- data.frame(ID=c("A","B","C","D"),y=c(1,2,3,4),animal=c(NA,NA, "dog", "cat"),stringsAsFactors = F)