【发布时间】:2020-08-08 13:27:40
【问题描述】:
这里有一些数据来证明我的问题:
garden <- c(1,2,3,4,5,6,7,8,9,10) %>% as.numeric
apples <- c(1,0,0,0,1,0,0,NA,NA,1) %>% as.integer ()
cherries <- c(0,1,0,0,1,1,1,NA,NA,1) %>% as.integer ()
pears <- c(0,NA,1,0,0,1,1,1,0,0) %>% as.integer ()
veg_tomatoes <- c(0,0,0,0,1,0,0,1,0,NA) %>% as.integer ()
veg_onions <- c(0,0,0,0,0,1,1,0,0,0) %>% as.integer ()
veg_peas <- c(0,0,0,0,0,0,0,0,0,1) %>% as.integer ()
veg_beans <- c(0,0,0,0,0,0,0,1,0,1) %>% as.integer ()
garden <- data.frame(garden,apples,cherries,pears,veg_tomatoes,veg_onions,veg_peas,veg_beans)
我想做的是:
a) 计算只有一种植物的花园的数量和百分比(例如,只有苹果树、只有樱桃树等的花园数量)
b) 计算种植果树和西红柿的花园的数量和百分比
c) 计算种植果树和一种或多种除西红柿以外的蔬菜的花园的数量和百分比
我正在寻找这个问题的实用解决方案。我的想法是从单独的lists 开始,用于水果、蔬菜和包括所有水果和蔬菜的列表,然后从那里开始工作。但是,当我尝试使用lapply 在匿名函数调用中组合各种filter 标准时,我感到很困难。对于单个列,我可以为绝对数字写类似 filter (garden, apples == 1, cherries == 0, pears == 0, veg_tomatoes == 0, veg_onions == 0, veg_peas == 0, veg_beans == 0) %>% nrow () 的内容。但即使对于一个专栏,这个解决方案看起来也不是很好,更不用说不得不一遍又一遍地重复这个问题。也许你们中的某个人有一个解决方案,可以解决如何处理这类任务并构造函数参数以获得所需的频率结果。
【问题讨论】:
-
您需要将数据转换为长格式,以便您的数据框具有以下列标题:花园、类型 = 蔬菜或树、植物 = 苹果、樱桃等,最后是一个布尔值,表示如果植物是否存在。
标签: r functional-programming iteration