问题描述
这是一个示例数据集:
data = data.frame('Cat' = c('A','A','B','C','C'),'Value' = c(1,1,2,3,3))
data
另一个数据框:
a = data.frame('Name' = c('A','D'))
所需的输出:
我想了解如何在数据框的同一行中引用另一个单元格,并使用该单元格的值执行某些功能。
此工作用于“数据中”:
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列:
- 猫:A B C D
- 计数:
- 比例:
- 中位数:
- 值>中位数:
- f(x):{count + 10}
- 数据中? :
解决方法
最好将这些操作归为合并和汇总。 (就单元格和行而言,看起来非常像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