我的英语不是很好,但我会尝试解释我的问题
我有一个这样的数据表(BASE_KPM_PD
),我必须拿起值
MOB PD_MONTH
1 0,000
2 0,000
3 0,000
4 0,000
5 0,003
6 0,007
7 0,006
8 0,006
9 0,004
我还有其他数据表(BASE_MONTHS
),其中包含每个月的值。这些值与上面数据表中的MOB
列相同
MONTH_1 MONTH_2 MONTH_3
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
我需要检查值并将PD_MONTH
通讯员提取到MOB。期望的输出低于
PD_MONTH1 PD_MONTH2 PD_MONTH3
0,000 0,000 0,000
0,000 0,000 0,000
0,000 0,000 0,003
0,000 0,003 0,007
0,003 0,007 0,006
0,007 0,006 0,006
0,006 0,006 0,004
我尝试的代码是。此代码有效,但它不是最好或最快的代码:
BASE_PD <- BASE_MONTHS
for (j in 1:3){
BASE_PD <- merge(BASE_PD,
BASE_KPM_PD[,c("MOB","PD_MONTH")],
by.x = colnames(BASE_PD[paste0("MONTH_",j)]),
by.y = "MOB" )
drops <- c(paste0("MONTH_",j))
BASE_PD <- BASE_PD[,!names(BASE_PD) %in% drops]
colnames(BASE_PD)[length(BASE_PD)] <- paste0("PD_MONTH_",j)
}
提前谢谢。
答案 0 :(得分:1)
在数据集BASE_KPM_PD
中,您似乎具有索引列“MOB”和数据列“PD_MONTH”。只要这些指数保持正确的顺序(1-12,没有间隙),以下内容应该有效。
as.data.frame(lapply(BASE_MONTHS, function(x) BASE_KPM_PD$PD_MONTH[x]))
这会遍历BASE_MONTHS
的每一列,并将其值用作BASE_KPM_PD
的索引。