我正在嘗試使串列中的所有資料框具有相同的列數。
創建一個包含 3 個資料框的串列,但第二個有 1 個額外的列。
my_data<-
list( data.frame(
V1= c(1,1,1,1,1),
V2= c(2,2,2,2,2),
V3= c(3,3,3,3,3),
V4= c(4,4,4,4,4),
V5= c(5,5,5,5,5)),
data.frame(
V1= c(1,1,1,1,1),
V2= c(2,2,2,2,2),
V3= c(3,3,3,3,3),
V4= c(4,4,4,4,4),
V5= c(5,5,5,5,5),
V6= c(6,6,6,6,6)),
data.frame(
V1= c(1,1,1,1,1),
V2= c(2,2,2,2,2),
V3= c(3,3,3,3,3),
V4= c(4,4,4,4,4),
V5= c(5,5,5,5,5))
手動洗掉列:如果 df[[2]] 有 > 5 列,則洗掉第 6 列
if (ncol(my_data[[2]])>5) {
my_data[[2]][,-6]
}
但是為什么在串列中回圈時相同的邏輯不起作用?
for (i in 1:length(my_data)) {
if (ncol(my_data[[i]])>5) {
my_data[[i]][,-6]
}
}
uj5u.com熱心網友回復:
你的邏輯作業得很好。當您遍歷回圈時,您必須將更新的幀分配回串列的該元素。
只需更換:
my_data[[i]][,-6]
和
my_data[[i]]<-my_data[[i]][,-6]
條款內if。
uj5u.com熱心網友回復:
從串列中的所有 data.frames 中獲取min最大的列數,然后在for回圈中使用該資訊,執行分配 ( <-) 以更新 data.frame 中的元素list
n <- min(sapply(my_data, ncol))
for(i in seq_along(my_data)) my_data[[i]] <- my_data[[i]][seq_len(n)]
uj5u.com熱心網友回復:
如果要保留具有相同名稱的列(無論順序如何),則獲取通用列名稱,然后選擇這些名稱:
selected_cols <- Reduce(intersect, lapply(my_data, names))
my_data <- lapply(my_data, function(x) x[selected_cols, ])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488441.html
上一篇:如何跨多行傳播for回圈目標串列
