我有两个不同尺寸的数据帧,
df1 <- data.frame(names= sample(LETTERS[1:10]), duration=sample(0:100, 10))
>df1
names duration
1 J 97
2 G 57
3 H 53
4 A 23
5 E 100
6 D 90
7 C 73
8 F 60
9 B 37
10 I 67
df2 <- data.frame(names= LETTERS[1:5], names_new=letters[1:5])
> df2
names names_new
1 A a
2 B b
3 C c
4 D d
5 E e
Run Code Online (Sandbox Code Playgroud)
我想在更换df1相匹配的价值df1$names和df2$names但使用df2$names_new.我想要的输出是:
> df1
names duration
1 J 97
2 G 57
3 H 53
4 a 23
5 e 100
6 d 90
7 c 73
8 F 60
9 b 37
10 I 67
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码,但我想知道是否有更简洁的方法来完成它没有这么多步骤,
df2[,1] <- as.character(df2[,1])
df2[,2] <- as.character(df2[,2])
df1[,1] <- as.character(df1[,1])
match(df1[,1], df2[,1]) -> id
which(!is.na(id)==TRUE) -> idx
id[!is.na(id)] -> id
df1[idx,1] <- df2[id,2]
Run Code Online (Sandbox Code Playgroud)
非常感谢
这是qdapTools的一种方法:
library(qdapTools)
df1$names <- df1$names %lc+% df2
Run Code Online (Sandbox Code Playgroud)
这%l+%是二进制运算符的版本lookup.左边是terms查找表,右边是查找表.这+意味着任何不兼容的产品都将恢复原状.这是data.table包的包装,速度非常快.
这是输出,包括set.seed(1)再现性:
set.seed(1)
df1 <- data.frame(names= sample(LETTERS[1:10]), duration=sample(0:100, 10),stringsAsFactors=F)
df2 <- data.frame(names= LETTERS[1:5], names_new=letters[1:5],stringsAsFactors=F)
library(qdapTools)
df1$names <- df1$names %lc+% df2
df1
## names duration
## 1 c 20
## 2 d 17
## 3 e 68
## 4 G 37
## 5 b 74
## 6 H 47
## 7 I 98
## 8 F 93
## 9 J 35
## 10 a 71
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |