r - R:通过应用不同的公式计算数据集的新变量
问题描述
我有一个具有以下结构的数据框“数据”:
structure(list(age = c(45, 4, 32, 45), sex = c(1, 0, 1, 0), height = c(165,
178, 145, 132), weight = c(65, 73, 60, 45)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
我想在这个 data.frame 中添加两个新变量(var1,var2),应该使用以下两个公式计算:
var1 = 年龄*身高 +(如果性别 ==1 则为 4 或如果性别 ==0 则为 2)
var2 = 身高*体重 +(如果年龄>40 则为 1,如果年龄=<40 则为 2)
我在将两个变量添加到数据框时都遇到了问题,无论是在应用函数时(我试图构建一个函数,但似乎只能应用于单个值而不是所有行的所有值)。
任何人都可以帮助我吗?
解决方案
akrun
的使用布尔算术的建议是一个很好的建议,但你也可以简单地做一个布尔版本的你自己的表达式,用乘法代替 if statements.s(对 "=<" 进行温和的编辑到 "<="
)
data <- structure(list(age = c(45, 4, 32, 45), sex = c(1, 0, 1, 0), height = c(165, 178, 145, 132), weight = c(65, 73, 60, 45)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
data <- within(data, {var1 = age*height + 4*(sex==1) + 2 *(sex==0);
var2 = height*weight + (age>40) + 2 *(age <= 40)})
#----
> data
age sex height weight var2 var1
1 45 1 165 65 10726 7429
2 4 0 178 73 12996 714
3 32 1 145 60 8702 4644
4 45 0 132 45 5941 5942
由于两组条件各自不相交,因此“不合格”选择项将分别为 0。
推荐阅读
- actions-on-google - 用于语音输入游戏的 Google Assistant
- javascript - Javascript动态条件执行
- c++ - C++ 中的内存问题 - 未初始化读取:读取寄存器 eax
- html - lapply 在函数内创建 numericInput 时无法分配标签
- php - 如何根据日期间隔从表中选择数据?
- java - peek() 和 allMatch() 如何在 Java 8 Stream API 中协同工作
- ruby-on-rails - 为什么时间戳保存在 psql 中但无法访问?如何访问?
- google-analytics - 跟踪具有相同域但不同 URL 的流量
- swift - 更改我的 ObservableObject 实例的属性不会更新 View。代码:
- c# - C# textfile 创建/删除同一行中的文本间距