首页 > 解决方案 > 提取r中整个数据帧范围内的值

问题描述

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

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

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

生成数据框:

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")

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

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

我希望输出的值如下所示: item1 item2 item3 "" "0.60737" ""

或者这个 item1 item2 item3 "" "0.60737" "0.60737"

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

标签: rdataframeextract

解决方案


您可以使用 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"

推荐阅读