返回符合条件的每列的行名列表

问题描述 投票:0回答:1

我正在尝试比较哪些变量加载到 R 中的探索性因子分析的哪些因子上。显着变量的值大于或等于 0.3。我有几个不同的数据集需要执行此操作,我正在尝试编写一个函数,该函数将数据集作为输入,然后返回每个因素的列表。

作为示例,请考虑下面的数据集,其中行名称是变量,列名称是因子。每个数据集至少有 10 个因子,所以我更喜欢有这个函数,而不是手动将每个因子添加到列表中。

data <- as.data.frame(matrix(c(0.1, 0.2, 0.3, 0.01, 0.02, 0.4, 0.7, 0.2, 0.3, -0.4), nrow = 5, ncol=2))
rownames(data) <- c('A', 'B', 'C', 'D', 'E')
colnames(data) <- c("MR1", "MR2")

print(data)

   MR1  MR2
A 0.10  0.4
B 0.20  0.7
C 0.30  0.2
D 0.01  0.3
E 0.02 -0.4

我想使用该功能

compare.loadings <- function(df) {
  groupings <- sapply(df, function(x) rownames(df)[abs(df[,x]) >= 0.3])
  return(groupings)
}

返回预期列表

print(compare.loadings(data))

$MR1
 [1] "C"

$MR2 
 [1] "A" "B" "D" "E"

但是,该函数当前返回一个空列表

$MR1
character(0)

$MR2
character(0)

我搜索了许多关于将函数应用于 R 中的列的不同答案,尝试

lapply
,但我不明白为什么我的函数返回空字符。我应该如何修改它以获得我的预期输出?

r lapply sapply
1个回答
0
投票

解决方案是将

names(df)
传递给
sapply
而不是数据帧本身。这样做会将列名称作为字符传递。

compare.loadings <- function(df) {
  groupings <- sapply(df, function(x) rownames(df)[abs(df[,x]) >= 0.3])
  return(groupings)
}

$MR1
[1] "C"

$MR2
[1] "A" "B" "D" "E"
© www.soinside.com 2019 - 2024. All rights reserved.