gpt4 book ai didi

r - 将行值(文本)与列名和返回值匹配

转载 作者:行者123 更新时间:2023-12-02 11:24:30 25 4
gpt4 key购买 nike

我试图在名为“region”的另一列中查找与文本同名的列名,并返回相应的值。我的数据“df”看起来与此类似

region  A   B   C   D   E   F
H 796 792 844 812 796 776
J 568 564 508 268 320 396
A 820 804 748 528 560 600
X 292 272 260 324 224 200
M 872 812 792 760 668 656
N 100 992 972 880 872 864
C 940 948 952 916 864 880
L 960 956 952 920 900 920
E 980 968 956 940 944 932
F 236 364 460 524 552 616
P 796 792 844 812 796 776
Q 568 564 508 268 320 396

我想得到一些看起来像这样的东西:
region  A   B   C   D   E   F
H NA NA NA NA NA NA
J NA NA NA NA NA NA
A 820 NA NA NA NA NA
X NA NA NA NA NA NA
M NA NA NA NA NA NA
N NA NA NA NA NA NA
C NA NA 952 NA NA NA
L NA NA NA NA NA NA
E NA NA NA NA 944 NA
F NA NA NA NA NA 616
P NA NA NA NA NA NA
Q NA NA NA NA NA NA

为此,我尝试了来自其他问题( Loop that matches row to column names and computes an average of the 3 preceding columns )的这段代码,但它只返回位置,我想获得如上例所示的值。
apply (df, MARGIN = 1, FUN = function(x, i){
position <- (which(x[['region']] == colnames(df)))
})

如何修改代码以获取实际值?
谢谢

最佳答案

第五个选项也使用 base职能

idx <- na.omit(cbind(match(names(df1), df1$region),
1:length(df1)))
vals <- as.integer(df1[idx])
df1[-1] <- NA
df1[idx] <- vals
df1
# region A B C D E F
#1 H NA NA NA NA NA NA
#2 J NA NA NA NA NA NA
#3 A 820 NA NA NA NA NA
#4 X NA NA NA NA NA NA
#5 M NA NA NA NA NA NA
#6 N NA NA NA NA NA NA
#7 C NA NA 952 NA NA NA
#8 L NA NA NA NA NA NA
#9 E NA NA NA NA 944 NA
#10 F NA NA NA NA NA 616
#11 P NA NA NA NA NA NA
#12 Q NA NA NA NA NA NA

数据

感谢@akrun
df1 <- structure(list(region = c("H", "J", "A", "X", "M", "N", "C", 
"L", "E", "F", "P", "Q"), A = c(796L, 568L, 820L, 292L, 872L,
100L, 940L, 960L, 980L, 236L, 796L, 568L), B = c(792L, 564L,
804L, 272L, 812L, 992L, 948L, 956L, 968L, 364L, 792L, 564L),
C = c(844L, 508L, 748L, 260L, 792L, 972L, 952L, 952L, 956L,
460L, 844L, 508L), D = c(812L, 268L, 528L, 324L, 760L, 880L,
916L, 920L, 940L, 524L, 812L, 268L), E = c(796L, 320L, 560L,
224L, 668L, 872L, 864L, 900L, 944L, 552L, 796L, 320L), F = c(776L,
396L, 600L, 200L, 656L, 864L, 880L, 920L, 932L, 616L, 776L,
396L)), class = "data.frame", row.names = c(NA, -12L))

关于r - 将行值(文本)与列名和返回值匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com