英文:
How do I extract value of a cell with the row and column numbers from a dataframe in R and then create a separate dataframe with the extracted values?
问题
我的数据在一个类似这样的数据框中:
id | A | B | C | D | E | F | G | H | Cl |
---|---|---|---|---|---|---|---|---|---|
P_1 | 23 | 25 | 27 | 30 | 31 | 33 | 35 | 37 | 5 |
P_2 | 20 | 27 | 25 | 30 | 28 | 32 | 26 | 26 | 3 |
P_3 | 17 | 24 | 25 | 32 | 25 | 31 | 26 | 32 | 2 |
P_4 | 14 | 24 | 25 | 33 | 22 | 30 | 22 | 38 | 6 |
P_5 | 11 | 24 | 25 | 35 | 19 | 29 | 23 | 44 | 5 |
P_6 | 8 | 24 | 25 | 30 | 16 | 28 | 20 | 50 | 6 |
- | - | - | - | - | - | - | - | - | |
- | - | - | - | - | - | - | - | - | |
- | - | - | - | - | - | - | - | - | |
P_10008 | - | - | - | - | - | - | - | - | - |
我有一个包含超过10,000行和14列的数据框(示例中使用了8列)。我索引了需要提取值的行和列号码。 "Cl" 列包含了我想要从每一行提取值的列号码(也是 id 列)。例如,从第一行,我想要从 "D" 列提取值 "30",并且还想保留 id 列(P_1)。从第二行,我想要提取 id 为 P_2 的行中的 "B" 列的值。
新的数据集将如下所示:
id | value |
---|---|
P_1 | 30 |
P_2 | 27 |
P_3 | 17 |
P_4 | 22 |
P_5 | 35 |
P_6 | 16 |
- | - |
- | - |
P_10008 | - |
我应该如何以 R 中的一种方式编写代码,以允许我提取整个数据集的单元格值?任何帮助将不胜感激。
英文:
My data are in a dataframe like this:
id | A | B | C | D | E | F | G | H | Cl |
---|---|---|---|---|---|---|---|---|---|
P_1 | 23 | 25 | 27 | 30 | 31 | 33 | 35 | 37 | 5 |
P_2 | 20 | 27 | 25 | 30 | 28 | 32 | 26 | 26 | 3 |
P_3 | 17 | 24 | 25 | 32 | 25 | 31 | 26 | 32 | 2 |
P_4 | 14 | 24 | 25 | 33 | 22 | 30 | 22 | 38 | 6 |
P_5 | 11 | 24 | 25 | 35 | 19 | 29 | 23 | 44 | 5 |
P_6 | 8 | 24 | 25 | 30 | 16 | 28 | 20 | 50 | 6 |
- | - | - | - | - | - | - | - | - | - |
- | - | - | - | - | - | - | - | - | - |
- | - | - | - | - | - | - | - | - | - |
P_10008 | - | - | - | - | - | - | - | - | - |
I have a dataframe with more than 10,000 rows and 14 columns (example attached in text using 8 columns). I indexed the row and column number from which I need to extract the value. The "Cl" column includes the column number (also id column) from which I would like to extract that value for each row. For example, from the first row I would like to extract the value “30” from the “D” column and also would like to keep the id column (P_1). Column “B” from the 2nd row with id P_2.
New dataset would be like,
id | value |
---|---|
P_1 | 30 |
P_2 | 27 |
P_3 | 17 |
P_4 | 22 |
P_5 | 35 |
P_6 | 16 |
- | - |
- | - |
P_10008 | - |
How do I write the code in a way in R that would allow me to extract the value of a cell with the row and column number for my whole dataset? Any help would be appreciated.
答案1
得分: 1
以下是翻译好的部分:
首先,可以按照以下方式操作。首先,创建数据:
dat <- structure(list(id = c("p_1", "P_2", "P_3", "P_4", "P_5", "P_6",
"P_7", "P_8", "P_9", "P_10"), A = c(23, 25, 23, 27, 30, 27, 23,
25, 27, 30), B = c(25, 27, 25, 27, 30, 23, 24, 26, 28, 30), C = c(27,
30, 27, 23, 25, 27, 30, 23, 16, 9), D = c(30, 23, 30, 13, 16,
19, 22, 25, 28, 31), E = c(23, 34, 23, 25, 27, 30, 23, 24, 26,
28)), row.names = c(NA, -10L), class = "data.frame")
您可以定义要提取的行索引和列名称。下面我们指定获取第1行的“D”列和第2行的“B”列:
row_index <- c(1, 2)
col_values <- c("D", "B")
接下来,您需要创建一个新的数据框,其中“id”值仅来自“id”的“row_index”值。 “value”列来自指定的列。您甚至可以将它保存为“column”列,以表示数字来自哪一列:
data.frame(id = dat$id[row_index],
value = dat[cbind(row_index, match(col_values, names(dat)))],
column = col_values)
#> id value column
#> 1 p_1 30 D
#> 2 P_2 27 B
创建于2023-08-09,使用 reprex v2.0.2
英文:
You could do it as follows. First, make the data:
dat <- structure(list(id = c("p_1", "P_2", "P_3", "P_4", "P_5", "P_6",
"P_7", "P_8", "P_9", "P_10"), A = c(23, 25, 23, 27, 30, 27, 23,
25, 27, 30), B = c(25, 27, 25, 27, 30, 23, 24, 26, 28, 30), C = c(27,
30, 27, 23, 25, 27, 30, 23, 16, 9), D = c(30, 23, 30, 13, 16,
19, 22, 25, 28, 31), E = c(23, 34, 23, 25, 27, 30, 23, 24, 26,
28)), row.names = c(NA, -10L), class = "data.frame")
You can define the row index and column names you want to extract. Below we are saying that take column "D" for row 1 and column "B" for row 2.
row_index <- c(1,2)
col_values <- c("D", "B")
Next, you need to make a new data frame where the id
value just comes from the row_index
values of id
. The value
column comes from the indicated column. You could even have it save the column from which the number came as column
:
data.frame(id = dat$id[row_index],
value = dat[cbind(row_index, match(col_values, names(dat)))],
column = col_values)
#> id value column
#> 1 p_1 30 D
#> 2 P_2 27 B
<sup>Created on 2023-08-09 with reprex v2.0.2</sup>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论