我有一个简单的R问题。我有两个数据帧。第一个包含我可能的所有年份。我将NA分配给第二列。第二个数据框只有可能年份的子集,但是第二列的实际值。我想结合两个数据帧。更具体地说,我希望按年份匹配它们,如果第二年具有正确年份,则将第一个中的NA替换为第二个中的NA。
这是示例代码。
one <- as.data.frame(matrix(1880:1890, ncol=2, nrow=11))
one[,2] <- NA
two <- data.frame(ncol=2, nrow=3)
two[1,] <- c(1880, "a")
two[2,] <- c(1887, "b")
two[3,] <- c(1889, "c")
我想获得第一行,第二列的第一列具有值“a”,第八行,第二列为“b”,第十行,第二列为“c”。
随意使上述代码更优雅。
我尝试了一件事作为初步步骤,但它给出了一些奇怪的结果:
one[,1]==two[,1] -> test
但测试仅包含值1880和1887 ...
答案 0 :(得分:3)
one[match(two[,1],one[,1]),2]<-two[,2]
那可以给你你想要的东西:
> one
V1 V2
1 1880 a
2 1881 <NA>
3 1882 <NA>
4 1883 <NA>
5 1884 <NA>
6 1885 <NA>
7 1886 <NA>
8 1887 b
9 1888 <NA>
10 1889 c
11 1890 <NA>
答案 1 :(得分:2)
我喜欢使用merge来解决这些类型的问题。在我看来,它非常简单。查看帮助文章?merge
three <- merge(one, two, by.x = 'V1', by.y = 'ncol', all = T)
答案 2 :(得分:1)
这是一种方法(merge
是另一种方法):
library(qdap)
one[, 2] <- lookup(one[, 1], two)
one
## V1 V2
## 1 1880 a
## 2 1881 <NA>
## 3 1882 <NA>
## 4 1883 <NA>
## 5 1884 <NA>
## 6 1885 <NA>
## 7 1886 <NA>
## 8 1887 b
## 9 1888 <NA>
## 10 1889 c
## 11 1890 <NA>