R 为另一列的值更改一列的值

R 为另一列的值更改一列的值,r,multiple-columns,R,Multiple Columns,我有两个数据集,如下所示: df1 <- data.frame(name=c("ab23242", "ab35366", "ab47490", "ab59614"), X=c(72722, 88283, 99999, 114278.333)) df2 <- data.frame(name=c("ab35366", "ab47490", "ab59614", "ab23242" ), X=c(12345, 23456

我有两个数据集,如下所示:

df1 <- data.frame(name=c("ab23242", "ab35366", "ab47490", "ab59614"), 
              X=c(72722, 88283, 99999, 114278.333))

df2 <- data.frame(name=c("ab35366", "ab47490", "ab59614", "ab23242" ), 
                  X=c(12345, 23456, 34567, 456789))
df.merge <- merge(df1, df2, by="name", all.x=T)
df.merge <- df.merge[, -2]

我想要的是将第一个数据集中第二列的值更改为第二个数据集中第二列的值。第一个数据集中的所有名称都在第二个数据集中,显然我的数据集要大得多

我试着用R来做这件事,但我是个新手。我正在查看intersect命令,但我不确定它是否有效。我不放任何密码,因为我在这里真的迷路了


我还需要第一个数据集中第一列(即名称)的顺序保持不变,但使用第二个数据集中第二列的新值

df1<- data.frame( name1 = letters[6:10], valuecol1=seq(2,10,by=2))
df2 <- data.frame( name2 = letters[1:10], valuecol2=10:1)
df2 [ match(df1$name1, df2$name2) , "valuecol2"] <- df1[ df1$name1 %in% df2$name2 , "valuecol1"]
df2

   name2 valuecol2
1      a        10
2      b         9
3      c         8
4      d         7
5      e         6
6      f         2
7      g         4
8      h         6
9      i         8
10     j        10
下面是我如何测试它(编辑)

>df2 df1 df2[匹配(df1$name1,df2$name2),“valuecol2”]df2
名称2值2
1 a 2
2 b 4
3 c 6
4d8
5 e 10
6 f 5
7 g 4
8小时3
9 i 2
10 j 1
是的。。。。又被咬了

> df1<- data.frame( name1 = letters[6:10], valuecol1=seq(2,10,by=2))
> df2 [ match(df1$name1, df2$name2) , "valuecol2"] <- df1[ match(df1$name1, df2$name2) , "valuecol1"]
> df2
   name2 valuecol2
1      a         2
2      b         4
3      c         6
4      d         8
5      e        10
6      f        NA
7      g        NA
8      h        NA
9      i        NA
10     j        NA
>df1 df2[匹配(df1$name1,df2$name2),“valuecol2”]df2
名称2值2
1 a 2
2 b 4
3 c 6
4d8
5 e 10
6 f NA
7克钠
8小时NA
9伊娜
10 j NA

同意@agstudy,简单使用merge就可以了。试着这样做:

df1 <- data.frame(name=c("ab23242", "ab35366", "ab47490", "ab59614"), 
              X=c(72722, 88283, 99999, 114278.333))

df2 <- data.frame(name=c("ab35366", "ab47490", "ab59614", "ab23242" ), 
                  X=c(12345, 23456, 34567, 456789))
df.merge <- merge(df1, df2, by="name", all.x=T)
df.merge <- df.merge[, -2]
我认为merge将保持第一帧的顺序,但您也可以通过简单地添加一个带有order
df1$order的列来严格保持顺序,这样如何:

library(data.table)
#  generate some random data
dt.1 <- data.table(id = 1:1000, value=rnorm(1000), key="id")
dt.2 <- data.table(id = 2*(500:1), value=as.numeric(1:500), key="id")

# objective is to replace value in df.1 with value from df.2 where id's match.
# data table joins - very efficient
# dt.1 now has 3 columns: id, value, and value.1 from dt.2$value
dt.1 <-dt.2[dt.1,nomatch=NA]
dt.1[is.na(value),]$value=dt.1[is.na(value),]$value.1
dt.1$value.1=NULL      # get rid of extra column
库(data.table)
#生成一些随机数据

dt.1
df1$@Codoremifa因为两个数据集的顺序不同而无法工作。如果你想这样做,你必须先对第一列进行排序。你可以在这里使用
merge
。“我还需要第一个数据集中第一列(即名称)的顺序保持不变,但使用第二个数据集中第二列的新值。”这一行有点混乱。我同意@agstudy关于
合并的意见。
     name    X.y
1 ab23242 456789
2 ab35366  12345
3 ab47490  23456
4 ab59614  34567
library(data.table)
#  generate some random data
dt.1 <- data.table(id = 1:1000, value=rnorm(1000), key="id")
dt.2 <- data.table(id = 2*(500:1), value=as.numeric(1:500), key="id")

# objective is to replace value in df.1 with value from df.2 where id's match.
# data table joins - very efficient
# dt.1 now has 3 columns: id, value, and value.1 from dt.2$value
dt.1 <-dt.2[dt.1,nomatch=NA]
dt.1[is.na(value),]$value=dt.1[is.na(value),]$value.1
dt.1$value.1=NULL      # get rid of extra column