1

我希望使用来自另一个数据帧的字符在大型数据帧中执行“查找/替换”因素。

用一个简单的例子来解释,我有以下数据框(df):

  ID1 ID2 value
1   A   A  0.01
2   A   D  0.02
3   B   D  0.03
4   B   C  0.04
5   C   F  0.05
6   C   D  0.06
7   D   A  0.07
8   D   C  0.08

并想用一个名称替换每个字母,该名称源自以下数据框(id):

  ID   NAME
1  A   ADAM
2  B    BOB
3  C   CARL
4  D  DAVID
5  E EDWARD
6  F   FRED

以(new.df)结束:

    ID1   ID2 value
1  ADAM  ADAM  0.01
2  ADAM DAVID  0.02
3   BOB DAVID  0.03
4   BOB  CARL  0.04
5  CARL  FRED  0.05
6  CARL DAVID  0.06
7 DAVID  ADAM  0.07
8 DAVID  CARL  0.08

我知道有许多简单的选项会涉及写出所有替换选项(即 A="ADAM"),但我需要替换 1000 个因子,所以这不是一个选项。

我不知道从哪里开始!我尝试car::recode使用这个重新编码网站,但它只替换为向量。

4

3 回答 3

0

一种可能效率低下的方法是重塑。

library(dplyr)
library(tidyr)

key = data_frame(
  ID = c("A", "B", "C", "D", "F"),
  name = c("Adam", "Bob", "Carl", "David", "Fred") )

data %>%
  mutate(row_ID = 1:n()) %>%
  gather(variable, ID, -value, -row_ID) %>%
  left_join(key) %>%
  select(-ID) %>%
  spread(variable, name)
于 2015-10-22T04:24:49.257 回答
0

你可能想试试

df$ID1 <- as.character(factor(df$ID1, levels=id$ID, labels=id$NAME))
于 2015-10-22T03:32:54.417 回答
0

我们可以这样做dplyr(使用与@thelatemail 相同的方法)。我们使用mutate_each,选择第一个数据集('df1')中的'ID1','ID2'列,match使用'df2'中的'ID'来获取数字索引,并使用它用'df2'中的'NAME'替换它'。

library(dplyr)
df1 %>%
     mutate_each(funs(df2$NAME[match(., df2$ID)]), ID1:ID2)
#    ID1   ID2 value
#1  ADAM  ADAM  0.01
#2  ADAM DAVID  0.02
#3   BOB DAVID  0.03
#4   BOB  CARL  0.04
#5  CARL  FRED  0.05
#6  CARL DAVID  0.06
#7 DAVID  ADAM  0.07
#8 DAVID  CARL  0.08
于 2015-10-22T04:26:58.560 回答