3

我正在使用以下示例:

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

我想用if中的值替换中New的值与中的任何值匹配。ModifiedNew_OrigOriginal

理想情况下New将如下所示:

New
2  
2
8
10
10
10
10
10
18
20  

非常感谢任何帮助。

亲切的问候,

4

3 回答 3

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
于 2013-01-09T10:39:06.363 回答
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
于 2013-01-09T10:31:17.207 回答
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"]
于 2013-01-09T10:26:57.403 回答