我正在使用以下示例:
Original Modified New_Orig New
1 2 1 0
2 4 1 0
3 6 4 0
4 8 5 0
5 10 5 0
6 12 5 0
7 14 5 0
8 16 5 0
9 18 9 0
10 20 10 0
如果New
与Modified
中的任何值匹配,我想用New_Orig
中的值替换Original
中的值。
理想情况下,New
将如下所示:
New
2
2
8
10
10
10
10
10
18
20
任何帮助都非常感激。
亲切的问候,
答案 0 :(得分:5)
此处创建了一个新列New
:
within(dat, New <- Modified*(New_Orig == Original))
Original Modified New_Orig New
1 1 2 1 2
2 2 4 1 0
3 3 6 4 0
4 4 8 5 0
5 5 10 5 10
6 6 12 5 0
7 7 14 5 0
8 8 16 5 0
9 9 18 9 18
10 10 20 10 20
<强>更新强>
匹配值并从Modified
中选择适当的值:
within(dat, New <- Modified[match(New_Orig, Original)])
Original Modified New_Orig New
1 1 2 1 2
2 2 4 1 2
3 3 6 4 8
4 4 8 5 10
5 5 10 5 10
6 6 12 5 10
7 7 14 5 10
8 8 16 5 10
9 9 18 9 18
10 10 20 10 20
答案 1 :(得分:2)
由于@rcs完全给出了我给出的答案,我想我会向你展示一种创建这个“新”列的替代方法,而不是将其初始化为全零。
data <- data.frame(Original = 1:10,
Modified = seq(2, 20, 2),
New_Orig = c(1, 1, 4, 5, 5,
5, 5, 5, 9, 10))
within(data, {
New <- ifelse(Original == New_Orig, Modified, 0)
})
# Original Modified New_Orig New
# 1 1 2 1 2
# 2 2 4 1 0
# 3 3 6 4 0
# 4 4 8 5 0
# 5 5 10 5 10
# 6 6 12 5 0
# 7 7 14 5 0
# 8 8 16 5 0
# 9 9 18 9 18
# 10 10 20 10 20
答案 2 :(得分:1)
尝试以下方法:
v <- dat$New_Orig==dat$Original # this gives a logical vector,
# you could also use which(dat$New_Orig==dat$Original)
# to obtain the indices
dat[v, "New"] <- dat[v, "Modified"]