R-根据另一个数据框的列中的值所满足的条件,在数据框列中添加值由公式得出

问题描述

这是一个示例数据集:

data = data.frame('Cat' = c('A','A','B','C','C'),'Value' = c(1,1,2,3,3))
data

enter image description here

一个数据框:

a = data.frame('Name' = c('A','D'))

所需的输出

enter image description here

我想了解如何在数据框的同一行中引用另一个单元格,并使用该单元格的值执行某些功能

工作用于“数据中”:

a[,'In Data?'] = ifelse(a$Name %in% unique(data$Cat),"Y","N")

失败:中位数:

b$Median = median(data$Cat[data$Cat == a$Name])

Error message:
Error in Ops.factor(data$Cat,a$Name) : 
  level sets of factors are different

失败

a$Count = ifelse(a$Name %in% unique(data$Cat),length(data$Cat==a$Name),0)

Error:
Error in Ops.factor(data$Cat,a$Name) : 
  level sets of factors are different

。 。 第二个Dataframe列:

  1. 猫:A B C D
  2. 计数:
  3. 比例:
  4. 中位数:
  5. 值>中位数:
  6. f(x):{count + 10}
  7. 数据中? :

解决方法

最好将这些操作归为合并和汇总。 (就单元格和行而言,看起来非常像Excel,而不是R)。 dplyr软件包在这里有很大帮助

library(dplyr)
a %>% 
  left_join(data,by=c("Name"="Cat")) %>% 
  group_by(Name) %>% 
  summarize(
    Count=sum(!is.na(Value)),Median=median(Value),ValuesGtMed=sum(Value>Median),f = Count+10,InData = if_else(Count>0,"Y","N")
  ) %>% 
  mutate(Proportion=Count/sum(Count))

left_join确保获得a中的所有值,然后对于Name定义的组仅使用不同的汇总函数

输出:

  Name  Count Median ValuesGtMed     f InData Proportion
  <chr> <int>  <dbl>       <int> <dbl> <chr>       <dbl>
1 A         3      1           0    13 Y             0.3
2 B         2      2           0    12 Y             0.2
3 C         5      3           0    15 Y             0.5
4 D         0     NA          NA    10 N             0