gpt4 book ai didi

r - 如何从R中其他列命名的列中选择数据

转载 作者:行者123 更新时间:2023-12-02 01:34:11 26 4
gpt4 key购买 nike

我在 R 中有一个数据框,其中一列(例如 A 列)命名其他列。例如,

colA     colB     colC     colD
'colB' 1 2 3
'colD' 4 5 6

我想创建一个新列,在其中提取 A 列命名的列中的值。例如,在上表中,我想创建一个新列,其第一行的值为 1,第二行的值为 6第二行。自动化构建此类塔的最佳方法是什么?如果 tidyverse 中有某种方法可以做到这一点,我将特别感激,但如果其他解决方案被认为更好,我也会接受其他解决方案。

最佳答案

我们可以使用match从'colA'中获取列索引和数据集的列名,通过cbind行索引创建一个矩阵并基于提取行/列索引

df1$new <- df1[-1][cbind(seq_len(nrow(df1)), match(df1$colA, names(df1)[-1]))]

-输出

> df1
colA colB colC colD new
1 colB 1 2 3 1
2 colD 4 5 6 6

这应该更有效,因为我们以矢量化方式使用索引


使用dplyr,我们可以rowwise并使用[[

提取列值
library(dplyr)
df1 %>%
rowwise %>%
mutate(new = cur_data()[[colA]]) %>%
ungroup
# A tibble: 2 × 5
colA colB colC colD new
<chr> <int> <int> <int> <int>
1 colB 1 2 3 1
2 colD 4 5 6 6

或者按照基本 R 解决方案中的方式创建行/列索引

df1 %>%
mutate(new = .[-1][cbind(row_number(), match(colA, names(df1)[-1]))])
colA colB colC colD new
1 colB 1 2 3 1
2 colD 4 5 6 6

数据

df1 <- structure(list(colA = c("colB", "colD"), colB = c(1L, 4L), colC = c(2L, 
5L), colD = c(3L, 6L)), class = "data.frame", row.names = c(NA,
-2L))

关于r - 如何从R中其他列命名的列中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72775529/

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