R无法将相同的值读取为相同的值。

时间:2018-02-14 22:44:15

标签: r

我正在尝试将两个数据集合并为一个,使用一个包含相同值的公共列,其中只有一个数据集具有重复的行。我尝试过使用merge,left_join和inner_join,但R似乎无法将某些值读取为相同。

示例:

数据集#1

df1:                   
id   month
1    oct
2    dec
3    oct

数据集#2

id   color
1    blue
1    red
1    yellow
2    red
3    yellow
3    blue
4    orange

我想要的结果就像这样

dfboth:
id   color    month
1    blue     oct
1    red      oct
1    yellow   oct
2    red      dec
3    yellow   oct
3    blue     oct
4    orange   NA

但是R总是给我一些以下内容

dfboth:
id   color    month
1    blue     NA
1    red      NA
1    yellow   NA
2    red      dec
3    yellow   oct
3    blue     oct
4    orange   NA

我尝试过使用

dfboth <- merge(df2, df1, by.x="id", by.y="id", all.x = TRUE)

dfboth <- left_join(df2, df1, by="id")

我还尝试更改列的类型(数字,整数,字符),但这只会更改R无法读取的“id”。

我有点像“R”的初学者,不知道什么可能是这个问题,所以我很感激你有任何想法。

谢谢:)

2 个答案:

答案 0 :(得分:1)

与dplyr的left_join()一起工作正常:

df1 <- read.table(text = "id   month
1    oct
2    dec
3    oct", header = TRUE)

df2 <- read.table(text = "id   color
1    blue
1    red
1    yellow
2    red
3    yellow
3    blue
4    orange", header = TRUE)

library(dplyr)

dfboth <- left_join(df2, df1)
dfboth
#   id  color month
# 1  1   blue   oct
# 2  1    red   oct
# 3  1 yellow   oct
# 4  2    red   dec
# 5  3 yellow   oct
# 6  3   blue   oct
# 7  4 orange  <NA>

答案 1 :(得分:-1)

我认为这会解决问题:

df1=tibble(id=c(1,2,3),month=c("oct","dec","oct"))
df2=tibble(id=c(1,1,1,2,3,3,4),color=c("blue","red","yellow","red","yellow","blue","orange"))
x0=(sapply(1:nrow(df2),function(x) which(df1$id==df2$id[x])))
x0<-sapply(x0,function(x) ifelse(length(x)>0,x,NA))
x01<-sapply(x0,length)
x01<-ifelse(x01>0,x01,NA)
df2$month<-sapply(x0,function(x) df1$month[x])
> df2
# A tibble: 7 x 3
     id color  month
  <dbl> <chr>  <chr>
1  1.00 blue   oct  
2  1.00 red    oct  
3  1.00 yellow oct  
4  2.00 red    dec  
5  3.00 yellow oct  
6  3.00 blue   oct  
7  4.00 orange NA