[英]Grabbing data from columns with same name in r
我目前有 2 個數據框
df1=data.frame(q1 = c(1:3),
q2 = c("One" , "Two" , "Three") ,
q3 = c(100,231,523),
q4 = c("red", "green", "blue"),
q1.2 = c(20:22),
q2.2 = c("Six" , "Ten" , "Twenty") ,
q3.2 = c(5,900,121),
q4.2 = c("purple", "yellow", "white"))
df2=data.frame(x1 = c("q1" , "q2.1" , "q3.2" , "q4.2") ,
x2 = c("q2" , "q3" , "q3.3" , "q4.4") ,
x3 = c("q3" , "q2.4" , "q3.3" , "q4.6"),
x4 = c("q4" , "q3.6" , "q3.3" , "q4.2"))
我需要創建 4 個不同的表。 這些表的標題是包含在 df2 中的每一行,而觀察值必須從 df1 中獲得。 正如您所注意到的,df2 中包含的某些標頭在 df1 中不存在。 我希望我的 4 個表包含所有 4 個標題(無論它們是否存在),如果不存在,則其數據應為空白。
我目前正在使用此代碼
for (i in 1:nrow(df2)) {
colnames(df2)<- df2[i,]
tabla_temp = df1[intersect(names(df1), names(df2))]
tname <- paste0("tabla_", i)
assign(tname, tabla_temp)
rm(tabla_temp)
}
我讓我的循環正常工作,但我得到了具有不同列數的表(只有那些存在於 df1 中的表)。
知道如何讓我的循環創建具有不存在標題的相同大小的表來代替空白 obs 嗎?
lapply(df2, function(x) {
merge(
df1[names(df1) %in% levels(x)],
read.table(text = "", col.names = levels(x)), all = T)
})
$x1
q1 q3.2 q4.2 q2.1
1 1 5 purple NA
2 2 900 yellow NA
3 3 121 white NA
$x2
q2 q3 q3.3 q4.4
1 One 100 NA NA
2 Three 523 NA NA
3 Two 231 NA NA
$x3
q3 q2.4 q3.3 q4.6
1 100 NA NA NA
2 231 NA NA NA
3 523 NA NA NA
$x4
q4 q4.2 q3.3 q3.6
1 blue white NA NA
2 green yellow NA NA
3 red purple NA NA
數據
df1=data.frame(q1 = c(1:3),
q2 = c("One" , "Two" , "Three") ,
q3 = c(100,231,523),
q4 = c("red", "green", "blue"),
q1.2 = c(20:22),
q2.2 = c("Six" , "Ten" , "Twenty") ,
q3.2 = c(5,900,121),
q4.2 = c("purple", "yellow", "white"))
df2=data.frame(x1 = c("q1" , "q2.1" , "q3.2" , "q4.2") ,
x2 = c("q2" , "q3" , "q3.3" , "q4.4") ,
x3 = c("q3" , "q2.4" , "q3.3" , "q4.6"),
x4 = c("q4" , "q3.6" , "q3.3" , "q4.2"))
您可以使用 dplyr 中的any_of() function 來完成。 它選擇與名稱匹配的變量並忽略那些不匹配的變量。 我將使用一個列表來存儲循環中的矩陣。 可以使用df_modified[[i]]
訪問它們。
# Loading libraries
library(tidyverse)
df_modified = list()
for(i in 1:nrow(df2))
{
vars = as.character(df2[i,])
df_modified[[i]] = df1 %>%
select(any_of(vars))
}
Output
> df_modified
[[1]]
q1 q2 q3 q4
1 1 One 100 red
2 2 Two 231 green
3 3 Three 523 blue
[[2]]
q3
1 100
2 231
3 523
[[3]]
q3.2
1 5
2 900
3 121
[[4]]
q4.2
1 purple
2 yellow
3 white
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.