r - 提取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"
这是我的第一个问题,所以如果我需要添加任何信息或进行任何编辑,请告诉我。
解决方案
您可以使用 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"
推荐阅读
- python - 如何将 2d 列表转换为 2d 本机 python 数组而不是 numpy 数组?
- ios - 如何组合仅样式化分段控件样式的重复代码?
- dialog - 模拟 Vaadin 8 窗口标题的 Vaadin 10 对话框
- c - 如何从 C 中的完整路径(字符串)将文本附加到文件名?
- python - 我希望 Django orm 从 dB 表中找到当前日期和日期时间字段之间的天数差异
- android - Android:使用迭代器解析 JSONArray 键
- php - Facebook Messenger 重复发送用户输入
- php - 检查在 UPDATE 查询中修改了哪些列
- perl - Perl:在多个目录中的多个文件上运行脚本
- php - 在 CakePHP 3 中更新/插入关联表数据