首先,这个问题是一个后续问题最近的问题 https://stackoverflow.com/questions/74956321/creating-the-equivalent-of-a-sumif-function-in-excel/74958483#74958483我在 Stack Overflow 上的回答令人满意,但在更复杂的领域/应用程序中。
然而,这一次,我在多个数据集上所做的选择以及这些数据集的相应真实模型上复制相同的计算/操作,这意味着相同的函数不能直接应用。
而且,一个更大的问题是,当将数据集的文件夹加载到 R 中的对象中而不是将一个数据集加载到对象中时,它会自动将 31 列命名为 V1:31,并且在之后我无法轻松地重命名每个数据集的列他们已加载。
所以,而不是有
df<- read.csv("0-11-3-462.csv", header = FALSE)
# change column names of all the columns in the dataframe 'df'
colnames(df) <- c("Y", "X1","X2", "X3", "X4","X5", "X6", "X7","X8", "X9",
"X10","X11", "X12", "X13","X14", "X15", "X16","X17",
"X18", "X19","X20", "X21", "X22","X23", "X24", "X25",
"X26", "X27", "X28","X29", "X30")
True_IVs <- df[1, -1]
结果是:
> str(True_IVs)
'data.frame': 1 obs. of 30 variables:
$ X1 : chr "0"
$ X2 : chr "0"
$ X3 : chr "0"
$ X4 : chr "1"
$ X5 : chr "0"
$ X6 : chr "0"
$ X7 : chr "0"
$ X8 : chr "0"
...
我现在有:
filepaths_list <- list.files(path = filepath, full.names = TRUE, recursive = TRUE)
datasets <- lapply(filepaths_list, read.csv, header = FALSE)
True_IVs <- lapply(datasets, function(j) {j[1, -1]})
datasets <- lapply(datasets, function(i) {i[-1:-3, ]})
datasets <- lapply(datasets, \(X) { lapply(X, as.numeric) })
数据集看起来像这样(其中 V 实际上一直到 V31,当然这只是数据集对象中第一个数据集的头部):
> head(datasets[[1]], n = 5)
V1 V2 V3 V4 V5
1 Regressor present 0 0 0 1
2 1 2 3 4
3 Y X1 X2 X3 X4
4 4.119024459 -1.350655759 1.901787258 0.205749783 0.242920532
5 1.737430635 0.26677565 0.054290757 1.510124319 -0.618655652
V6 V7 V8 V9 V10
1 0 0 0 0 0
2 5 6 7 8 9
3 X5 X6 X7 X8 X9
4 -0.405946237 -0.667673545 0.745735562 0.143317951 1.376182976
5 0.289294477 -0.220927214 0.251479422 -0.094245944 0.792214818
跳到上一个问题开始的同一部分,现在在更高维度的情况下,对于 IVs_Selected_by_BE,结果为:
> IVs_Selected_by_BE
[[1]]
[1] "V3" "V4" "V5" "V6" "V9" "V11" "V14" "V16" "V18" "V20" "V21"
[12] "V23" "V26" "V27" "V28" "V29" "V31"
[[2]]
[1] "V3" "V6" "V7" "V8" "V9" "V12" "V13" "V14" "V15" "V17" "V18"
[12] "V21" "V22" "V23" "V24" "V25" "V26" "V30"
这很烦人和令人不安,但同样的情况(或多或少)发生在
True_Regressors now as well:
[[1]]
[1] "V5" "V11" "V14" "V20" "V21" "V23" "V26" "V27" "V28" "V29" "V31"
[[2]]
[1] "V7" "V8" "V14" "V15" "V17" "V18" "V21" "V22" "V24" "V26" "V30"
注意:True_Regressors 是通过运行以下命令获得的:
True_Regressors <- lapply(True_IVs, function(i) { names(i)[i == 1] })
# verus only having to use this for the single dataset case previously
True_Regressors <- names(True_IVs)[True_IVs == 1]
我的问题是每个 V 右边的数字都是错误的,它们都大了 1。