R 如何合并数据以应用于第二个数据集中某列的所有唯一条件,即使在不发生的情况下

R 如何合并数据以应用于第二个数据集中某列的所有唯一条件,即使在不发生的情况下,r,dplyr,tidyr,data-manipulation,R,Dplyr,Tidyr,Data Manipulation,我试图根据原始数据集中某列的唯一值插入新行数据。我有以下虚拟数据集: sites<-c("10","10","11","11","12","12") ID<-c("A","A","B","B","C","D") value<-c("4","6","5","2","7","8") dataframe<-data.frame(sites, ID, value) sites<-c("10","10","11","11","12","12","13","14","15")

我试图根据原始数据集中某列的唯一值插入新行数据。我有以下虚拟数据集:

sites<-c("10","10","11","11","12","12")
ID<-c("A","A","B","B","C","D")
value<-c("4","6","5","2","7","8")
dataframe<-data.frame(sites, ID, value)

sites<-c("10","10","11","11","12","12","13","14","15")
dataframe2<-data.frame(sites)
对于列ID中的每个唯一值,我希望应用第二个数据框中的每个站点号,如果没有值,我希望它打印0

例如,ID A将列出site2中的所有站点,当没有值时(即对于Site11、12、13、14),我希望它列出0作为值

我尝试了以下方法:

mergeddata<-merge(dataframe, dataframe2, by="sites", all.y=TRUE)

mergeddata这可能是来自包tidyr
complete()
的作业。您可以按
ID
对第一个数据集进行分组,然后使用
complete()
在每个组中为
站点的
值添加行

这导致每个
ID
中的每个
站点至少有一行。我使用
fill
参数将新行的0添加到
value
(将
value
转换为数值后)

库(dplyr)
图书馆(tidyr)
dataframe$value=as.numeric(as.character(dataframe$value))
数据帧%>%
分组依据(ID)%>%
完成(站点=dataframe2$站点,填充=列表(值=0))
#A tibble:26 x 3
#组别:ID[4]
ID站点值
1 A 10 4
2 A 10 6
3 A 11 0
4 A 12 0
5 A 130
6 A 14 0
7 A 15 0
8 B 10 0
9 B 11 5
10 B 11 2
# ... 还有16行
警告信息:
列“sites”连接不同级别的因子,强制为字符向量

警告消息与
site
是两个数据集中的一个因素有关,而
complete()
通过将两列转换为字符来处理该问题。

这可能是来自packagetidyr的
complete()
的工作。您可以按
ID
对第一个数据集进行分组,然后使用
complete()
在每个组中为
站点的
值添加行

这导致每个
ID
中的每个
站点至少有一行。我使用
fill
参数将新行的0添加到
value
(将
value
转换为数值后)

库(dplyr)
图书馆(tidyr)
dataframe$value=as.numeric(as.character(dataframe$value))
数据帧%>%
分组依据(ID)%>%
完成(站点=dataframe2$站点,填充=列表(值=0))
#A tibble:26 x 3
#组别:ID[4]
ID站点值
1 A 10 4
2 A 10 6
3 A 11 0
4 A 12 0
5 A 130
6 A 14 0
7 A 15 0
8 B 10 0
9 B 11 5
10 B 11 2
# ... 还有16行
警告信息:
列“sites”连接不同级别的因子,强制为字符向量

警告消息与
site
是两个数据集中的一个因素有关,这两个数据集
complete()
通过将两列转换为字符来处理问题。

能否将
all.y
更改为
all
并查看发生了什么?能否将
all.y
更改为
all
并查看发生了什么?这就是我正在寻找的!非常感谢。我已经运行了你的代码,但不是零,而是NA。我使用dataframe[is.na(dataframe)]修复了这个问题,这就是我要找的!非常感谢。我已经运行了你的代码,但不是零,而是NA。我通过使用dataframe[is.na(dataframe)]
mergeddata<-merge(dataframe, dataframe2, by="sites", all.y=TRUE)
library(dplyr)
library(tidyr)

dataframe$value = as.numeric( as.character(dataframe$value) )

dataframe %>%
    group_by(ID) %>%
    complete(sites = dataframe2$sites, fill = list(value = 0) )

# A tibble: 26 x 3
# Groups:   ID [4]
   ID    sites value
   <fct> <chr> <dbl>
 1 A     10        4
 2 A     10        6
 3 A     11        0
 4 A     12        0
 5 A     13        0
 6 A     14        0
 7 A     15        0
 8 B     10        0
 9 B     11        5
10 B     11        2
# ... with 16 more rows
Warning message:
Column `sites` joining factors with different levels, coercing to character vector