所以我有两个不同的数据集,我试图检查列名是否在另一个数据集中有一个重复的列名。例如:
V1 V2 V3
1 2 3
作为一个数据集和
V4 V6 V1 V2
NA NA NA NA
我正试图让第二个数据集像这样
V4 V6 V1 V2
NA NA 1 NA
只有原始数据集中的最小值才会复制,如果是这样的话。我尝试过使用这个功能:
if(ncol((Session1t[grep(temp1, names(Session1t))])) != 0)
但这不起作用。无论输入什么,它都返回相同的值。在输入if语句后,我然后只复制我想要的列,并且我已经弄明白了,我只是无法使if语句有效地工作。
答案 0 :(得分:2)
我们可以使用ifelse
和%in%
来匹配列名,并将NA
替换为1.
# Create example data frame D1
D1 <- read.table(text = "V1 V2 V3
1 2 3",
header = TRUE)
# Create example data frame D2
D2 <- read.table(text = "V4 V6 V1 V2
NA NA NA NA",
header = TRUE)
# Replace NA to 1 if column names match
D2[1, ] <- ifelse(names(D2) %in% names(D1), 1, NA)
D2
# V4 V6 V1 V2
# 1 NA NA 1 1
答案 1 :(得分:1)
或另一个选项是intersect
nm1 <- intersect(names(df1), names(df2))
df2[nm1] <- df1[nm1]