在这里,我们只需将match(df 更改为match(unlist(df) 或根据?match 转换为matrix,第一个参数'x' 将是一个向量
x - 向量或NULL:要匹配的值。支持长向量。
unlisting 返回一个向量或转换为matrix 可以是一个带有dim 属性的向量
df[] <- lookuptable$values[match(as.matrix(df), lookuptable$answers)]
-输出
df
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 3 3 2 4 4 5 1 3 2 5
2 4 1 1 4 5 5 5 5 1 5
3 3 4 4 3 2 1 4 3 3 2
4 1 5 5 3 1 3 2 1 4 1
5 4 1 5 1 5 3 2 5 3 3
6 4 2 5 4 5 1 5 3 4 1
7 5 2 5 3 3 3 2 3 4 4
8 2 4 3 3 1 2 1 3 2 4
9 5 3 2 1 3 2 1 5 1 3
10 5 4 3 3 3 3 4 2 3 1
11 1 3 1 5 2 5 4 5 5 2
12 1 1 1 4 2 5 1 1 3 4
13 5 5 4 4 4 5 5 1 5 4
14 1 3 4 5 4 2 2 1 3 1
15 1 5 2 2 3 5 2 2 1 5
16 2 5 2 1 5 4 4 1 4 3
17 1 4 4 3 1 5 4 1 3 2
18 4 2 3 2 1 5 2 1 5 2
19 5 3 3 4 2 4 3 3 2 4
20 2 3 4 4 4 1 5 3 5 3
-比较输入数据和查找表
> head(df)
V1 V2 V3 V4 V5 V6
1 Neither agree or disagree Neither agree or disagree Disagree Agree Agree Strongly Agree
2 Agree Strongly Disagree Strongly Disagree Agree Strongly Agree Strongly Agree
3 Neither agree or disagree Agree Agree Neither agree or disagree Disagree Strongly Disagree
4 Strongly Disagree Strongly Agree Strongly Agree Neither agree or disagree Strongly Disagree Neither agree or disagree
5 Agree Strongly Disagree Strongly Agree Strongly Disagree Strongly Agree Neither agree or disagree
6 Agree Disagree Strongly Agree Agree Strongly Agree Strongly Disagree
V7 V8 V9 V10
1 Strongly Disagree Neither agree or disagree Disagree Strongly Agree
2 Strongly Agree Strongly Agree Strongly Disagree Strongly Agree
3 Agree Neither agree or disagree Neither agree or disagree Disagree
4 Disagree Strongly Disagree Agree Strongly Disagree
5 Disagree Strongly Agree Neither agree or disagree Neither agree or disagree
6 Strongly Agree Neither agree or disagree Agree Strongly Disagree
> lookuptable
answers values
1 Strongly Agree 5
2 Agree 4
3 Neither agree or disagree 3
4 Disagree 2
5 Strongly Disagree 1
注意:在上述解决方案中,我们假设 OP 希望根据查找表更改“df”中的所有列。如果只有一部分列需要更改,请仅选择感兴趣的列(基于位置索引或列名)。假设,如果有一列是我们不需要包含的第一列,在索引之前使用-进行选择,对数据子集进行转换,并分配回相同的选择数据列
df[-1] <- lookuptable$values[match(as.matrix(df[-1]), lookuptable$answers)]
如果要删除多列,使用c()追加索引
df[-c(1, 5)] <- lookuptable$values[match(as.matrix(df[-c(1, 5)]),
lookuptable$answers)]
或者如果我们需要选择没有前 3 个的
df[-(1:3)] <- lookuptable$values[match(as.matrix(df[-(1:3)]),
lookuptable$answers)]
数据
set.seed(24)
df <- as.data.frame(matrix(sample(lookuptable$answers, 20 * 10,
replace = TRUE), 20, 10))