英文:
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?
问题
你可以使用R语言编写代码来提取数据框中指定行和列的值。以下是一个示例代码:
# 创建一个示例数据框
df <- data.frame(
id = c("P_1", "P_2", "P_3", "P_4", "P_5", "P_6", "P_10008"),
A = c(23, 20, 17, 14, 11, 8, NA),
B = c(25, 27, 24, 24, 24, 24, NA),
C = c(27, 25, 25, 25, 25, 25, NA),
D = c(30, 30, 32, 33, 35, 30, NA),
E = c(31, 28, 25, 22, 19, 16, NA),
F = c(33, 32, 31, 30, 29, 28, NA),
G = c(35, 26, 26, 22, 23, 20, NA),
H = c(37, 26, 32, 38, 44, 50, NA),
Cl = c(5, 3, 2, 6, 5, 6, NA)
)
# 创建一个新的数据框来存储提取的值
new_df <- data.frame(
id = df$id,
value = NA
)
# 使用循环遍历每一行,提取指定列的值
for (i in 1:nrow(df)) {
row_index <- i
col_index <- df$Cl[i]
new_df$value[i] <- df[row_index, col_index]
}
# 打印提取后的数据框
print(new_df)
这段代码首先创建了一个示例数据框 df
,然后创建了一个新的数据框 new_df
来存储提取的值。接下来,使用循环遍历每一行,提取指定列的值,并将其存储在 new_df
中的相应行。最后,打印出提取后的数据框 new_df
。
请注意,示例数据框中的缺失值用 NA
表示。你可以根据实际情况修改代码以适应你的数据框。希望对你有帮助!
英文:
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>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论