首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相关向量,其名称与r dataframe中每一行中的两个变量的值相匹配。

相关向量,其名称与r dataframe中每一行中的两个变量的值相匹配。
EN

Stack Overflow用户
提问于 2020-12-27 17:46:58
回答 1查看 94关注 0票数 2

我在r (链接) (下面的示例行和列)中有这个数据

代码语言:javascript
复制
FocalID     Mother   Adelaide Asimov Austen Brazzaville Lusaka Kinshasa
Adelaide    HalfEar    0      0.0380 0.0417      0.0366 0.0278   0.0385
Asimov      Lusaka     0.0380 0      0.0845      0.0357 0.169    0.0641
Austen      Kinshasa   0.0417 0.0845 0           0.0526 0.0952   0.0411
Brazzaville NA         0.0366 0.0357 0.0526      0      0.0395   0.0488

我想添加一个新变量df$cor,其中每行中的值都是关联的结果。关联应该在两个向量之间进行:(1)列的冒号对应于该行中变量df$FocalID的值,(2)其名称对应于该行中变量df$母亲的值的列。

如果匹配母亲姓名的列的向量对应者不存在(要么因为母亲不知道(df$母亲中的NA ),要么不存在冒名),则相关关系应该产生安娜。

我尝试了以下代码:

代码语言:javascript
复制
df$cor <- cor(df[, colnames(df) %in% df$FocalID], df[, colnames(df) %in% df$Mother])

然而,结果似乎并不正确。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-27 17:50:08

如果我们需要对每个成对列执行此操作,我们将检查“FocalID”、“母”列是否与complete.cases无关。然后,在仅指定非NA列的列上循环,使用applyMARGIN = 1检查这些元素是否为%in%数据集的列名,选择数据,应用cor并创建新的列Cor

代码语言:javascript
复制
i1 <-  complete.cases(df[1:2])
df$Cor <- NA_real_
df$Cor[i1] <-  apply(df[i1, 1:2], 1, function(x) 
   if(all(x %in% names(df))) cor(df[, x[1]], df[, x[2]]) else NA)

-output

代码语言:javascript
复制
df$Cor
#[1]          NA  0.09769710  0.26956397          NA  0.04820137 -0.07776837          NA  0.19553956 -0.09596063          NA  0.04806345
#[12]  0.66489746          NA          NA          NA -0.04254666 -0.05975570  0.47359966  0.09745244          NA          NA  0.24750130
#[23]          NA          NA          NA          NA          NA          NA          NA          NA  0.10822526          NA  0.07093166
#[34]          NA          NA -0.18088278 -0.17548394  0.11585058  0.07278060  0.36327624  0.10178624          NA          NA          NA
#[45]  0.20491334          NA

或者使用来自dplyrdplyr

代码语言:javascript
复制
library(dplyr)
df <- df %>%
        rowwise %>% 
        mutate(Cor = if(!is.na(FocalID) & !is.na(Mother) & 
           all(c(FocalID, Mother) %in% names(.)))
          cor(df[[FocalID]], df[[Mother]]) else NA_real_)

数据

代码语言:javascript
复制
library(readxl)
df <- read_excel(file.choose(), na = "NA")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65468653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档