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