将值从一个数据帧添加到R中的另一个数据帧

时间:2017-03-17 02:07:38

标签: r

您好我想使用R。

将一个数据帧中的行添加到另一个数据帧

我有一个数据帧DATA1,其中有一些ID丢失,Data2有所有ID,我想用所有匹配ID的DATA1值替换DATA2频率列。 我希望OUTPUT数据帧作为我的输出。

Data1
ID  frequency
1   1
2   7
3   11
5   4

DATA2
ID  frequency
1   0
2   0
3   0
4   0
5   0
6   0

Output
ID  frequency
1   1
2   7
3   11
4   0
5   4
6   0

3 个答案:

答案 0 :(得分:2)

如果数据ID是唯一的,我认为可以使用ID作为rownames。

data1 <- data.frame(
  freq = c(1, 7, 11, 4),
  row.names = c(1, 2, 3, 5)
)

data2 <- data.frame(
  freq = rep(0,6),
  row.names = seq(1, 6)
)
output <- data2
apply(
  matrix(rownames(data1), ncol=1),
  1,
  function(x){
    output[x, 1] <<- data1[x, 1];
    return(NULL)
  }
)

结果是:

> output
  freq
1    1
2    7
3   11
4    0
5    4
6    0

答案 1 :(得分:1)

我确定这是一个优雅的单行解决方案,但dplyr方式是按ID加入数据框,然后整理输出。

library(dplyr)
OUTPUT <- Data1 %>% 
            right_join(DATA2, by = "ID") %>%
            mutate(frequency = ifelse(is.na(frequency.x), frequency.y, frequency.x)) %>%
            select(ID, frequency)

答案 2 :(得分:1)

您可以使用 data.table 进行联接。

library(data.table)
## set both data frames to data tables
setDT(Data1); setDT(Data2)
## copy 'Data2' to a new table 'Output' which we will assign values to
Output <- copy(Data2)
## join on 'ID' and assign by reference the relevant 'frequency' values
Output[Data1, frequency := i.frequency, on = "ID"]
Output
#    ID frequency
# 1:  1         1
# 2:  2         7
# 3:  3        11
# 4:  4         0
# 5:  5         4
# 6:  6         0

原始数据:

Data1 <- structure(list(ID = c(1L, 2L, 3L, 5L), frequency = c(1L, 7L, 
11L, 4L)), .Names = c("ID", "frequency"), class = "data.frame", row.names = c(NA, 
-4L))

Data2 <- structure(list(ID = 1:6, frequency = c(0L, 0L, 0L, 0L, 0L, 0L
)), .Names = c("ID", "frequency"), class = "data.frame", row.names = c(NA, 
-6L))