在 r 中的整个数据帧的范围内提取值

extract values within a range across an entire dataframe in r

我正在尝试提取数据框中的特定值。我正在尝试这样做,因为我想从已保存为数据框的输出中收集相关信息,以便提取感兴趣的信息。

我创建了一个包含残差相关性的数据框。我添加了一个包含项目名称的列,而不是使用行名称。我编写了一个函数,如果残差相关值高于 .15,则 returns 列名:rescorpair <- apply(res.corr, 1, function(x) paste(colnames(res.corr)[哪个((x > .15 & x < 1.00) |x < -.15 )], collapse = ", ")) res.corr 是具有残差相关性的数据帧。 这很有用,因为通过使用列名和行名,我可以识别大于 .15 的项目对。我想创建一个类似的函数,但是 returns 相关值而不是行名。

我在下面包含了一个可重现的示例,但通过以下方式简化了该示例。我只是制作了一个与几个项目相关的数据框,而不是残差相关性。

生成数据帧:

item1<-c(1,3,2,4,5,5)
item2<-c(2,3,5,4,5,4)
item3<-c(3,2,4,5,4,4)
items<-cbind(item1,item2,item3)
corrdata<-Hmisc::rcorr(items)
corr<-as.data.frame(corrdata$r)
corr$itemn<-c("item1","item2","item3")

我更改了有关 returns 列名称的函数的一些内容以适合示例数据(我更改了我想要选择的值的范围)

itemcorr <- apply(corr, 1, function(x) paste(colnames(corr)[which((x > .6 & x < 1.00) |x < -.6 )], collapse = ", "))

我希望值的输出如下所示: 项目 1 项目 2 项目 3 "" "0.60737" """

或者这个 项目 1 项目 2 项目 3 "" "0.60737" "0.60737"

这是我的第一个问题,所以如果我需要添加任何信息或进行任何编辑,请告诉我。

您可以通过将数据从宽格式转换为长格式然后应用条件来使用 dplyr 执行类似的操作。

这是一个如何操作的例子;

library(dplyr)

# Creating items
item1 <- c(1,3,2,4,5,5)
item2 <- c(2,3,5,4,5,4)
item3 <- c(3,2,4,5,4,4)
items <- cbind(item1, item2, item3)

# Calculating correlation
corrdata <- Hmisc::rcorr(items)

# Creating dataframe from correlation list
corr <- 
  as.data.frame(corrdata$r) %>% # Converting to dataframe
  tibble::rownames_to_column() %>% # Adding row names
  tidyr::gather(key = "item", value = "value", -rowname) %>% # From wide to long
  filter((value > .6 & value < 1.00) | value < -.6) # Adding condition

apply(corr, 1, paste, collapse = " ") # To paste into character

# [1] "item3 item2 0.6073734" 
# [2] "item2 item3 0.6073734"

您可以按行使用 apply,检查范围内是否有任何值和 return 值或 return NA.

apply(corr[-4], 1, function(x) {
   inds <- which(x > 0.6 & x < 1)
   if(length(inds)) x[inds] else NA
})

#  item1   item2   item3 
#     NA 0.60737 0.60737