R 如何在数据框中搜索多个字符串,并根据字符串列和行提取不同的列内容
我有一个大数据集(约500000 x 5000),需要执行以下操作:R 如何在数据框中搜索多个字符串,并根据字符串列和行提取不同的列内容,r,R,我有一个大数据集(约500000 x 5000),需要执行以下操作: 在整个数据集中搜索多个不同的字符串(一次最多30个) 根据字符串所在的列,从同一行中的另一列检索信息。这些列是链接的,因此列V1链接到D1,而V2链接到D2。因此,如果在第3行中标识了一个字符串,例如,V2我想提取第3行中的值 还应该从同一行的固定列(在我的例子中是ID)中提取值 我已经能够使用来识别每个字符串的行号和列号,但无法根据搜索结果确定提取额外列值的下一步 示例data.frame: df <- data.fr
V1
链接到D1
,而V2
链接到D2
。因此,如果在第3行中标识了一个字符串,例如,V2
我想提取第3行中的值ID
)中提取值来识别每个字符串的行号和列号,但无法根据搜索结果确定提取额外列值的下一步
示例data.frame
:
df <- data.frame("ID" = 1:5,
"V1" = c("A1", "A2", "A1", "A3", "A4"),
"V2" = c("A6", "NA", "A3", "A2", "A1"),
"D1" = c("B3", "B3", "B2", "B1", "B5"),
"D2" = c("B8", "NA", "B2", "B6", "B2"),
stringsAsFactors=FALSE)
ID V1 V2 D1 D2
1 A1 A6 B3 B8
2 A2 NA B3 NA
3 A1 A3 B2 B2
4 A3 A2 B1 B6
5 A4 A1 B5 B2
下面是一个使用数据的选项。表:
library(data.table)
setDT(df)
df_melted <- melt(df, id.vars = "ID", measure.vars = patterns(V = '^V', D = '^D'))
df_melted
# ID variable V D
# 1: 1 1 A1 B3
# 2: 2 1 A2 B3
# 3: 3 1 A1 B2
# 4: 4 1 A3 B1
# 5: 5 1 A4 B5
# 6: 1 2 A6 B8
# 7: 2 2 NA NA
# 8: 3 2 A3 B2
# 9: 4 2 A2 B6
# 10: 5 2 A1 B2
strings <- c("A1")
df_melted[V %chin% strings, paste0('ID: ', ID, ', D', variable, ": ", D)]
# "ID: 1, D1: B3" "ID: 3, D1: B2" "ID: 5, D2: B2"
库(data.table)
setDT(df)
在R基中,我们可以分离“V”和“D”列,找到“A1”的出现
从V_cols
获取相应的ID
,由于V_cols
和D_cols
是链接的,我们可以使用从D_cols
获取相应的值,该具有行和列索引
V_cols <- grep("^V", names(df), value = TRUE)
D_cols <- grep("^D", names(df), value = TRUE)
mat <- which(df[V_cols] == "A1", arr.ind = TRUE)
data.frame(ID = df$ID[mat[, 1]], D_var = df[D_cols][mat], D_col = D_cols[mat[, 2]])
# ID D_var D_col
#1 1 B3 D1
#2 3 B2 D1
#3 5 B2 D2
V_cols
V_cols <- grep("^V", names(df), value = TRUE)
D_cols <- grep("^D", names(df), value = TRUE)
mat <- which(df[V_cols] == "A1", arr.ind = TRUE)
data.frame(ID = df$ID[mat[, 1]], D_var = df[D_cols][mat], D_col = D_cols[mat[, 2]])
# ID D_var D_col
#1 1 B3 D1
#2 3 B2 D1
#3 5 B2 D2