在此先感谢您的帮助!
目标:我正在查看住房负担能力数据,构建了一个按职业显示住房负担能力的工具。我有一个职业及其中位数工资的数据框,以及该地区所有房地产的所有房屋价值的数据框。
挑战:我正在寻找一种方法,将每个房屋价值与特定于每个职业的可负担性指标进行比较,如果房屋价值低于实际价值,则使用TRUE / FALSE,Y / N或1/0填充数据框。指标。最终结果将是带有原始值作为观察值的数据帧,每个职业一列。
下面是一些示例代码,可以更好地说明问题:
我正在尝试结合以下内容:
Job Median Wage Can Afford
Lawyer 104756 272365.5
Bus Driver 26598 69154.8
Retail Sales 48923 127199.8
还有这个:
Property Value
927346
12345
87492
12734
73642
要创建这样的东西:
Value Lawyer Bus Driver Retail Sales
927346 N N N
12345 Y N Y
87492 Y N Y
12734 Y Y Y
73642 Y Y Y
运行Rstudio 3.5。任何想法将不胜感激!
我们可以使用map2
frompurrr
来做到这一点。遍历“作业”,“ MedianWage”的各个元素的行,检查第二个数据集中的“ PropertyValue”是否小于“ MedianWage”的2.6倍,以创建逻辑列并将list
数据集的绑定到单个“ df2”的第一列
library(tidyverse)
map2(df1$Job, df1$MedianWage, ~
df2 %>%
transmute(!! .x := PropertyValue < 2.6 * .y)) %>%
bind_cols(df2, .)
或搭配 pmap
pmap(df1, ~
df2 %>%
transmute(!! ..1 := PropertyValue < 2.6 * ..2)) %>%
bind_cols(df2, .)
# PropertyValue Lawyer Bus Driver Retail Sales
#1 927346 FALSE FALSE FALSE
#2 12345 TRUE TRUE TRUE
#3 87492 TRUE FALSE TRUE
#4 12734 TRUE TRUE TRUE
#5 73642 TRUE FALSE TRUE
可以使用ifelse
或通过将逻辑向量转换为数字索引来将其更改为“ Y / N”
pmap(df1, ~
df2 %>%
transmute(!! ..1 := c("N", "Y")[1 + (PropertyValue < 2.6 * ..2)])) %>%
bind_cols(df2, .)
或者使用sapply
从base R
cbind(df2, sapply(setNames(2.6 * df1$MedianWage, df1[[1]]), `>`, df2$PropertyValue))
注意:最好使用逻辑列(TRUE/FALSE
)代替Y/N
df1 <- structure(list(Job = c("Lawyer", "Bus Driver", "Retail Sales"
), MedianWage = c(104756L, 26598L, 48923L)), .Names = c("Job",
"MedianWage"), class = "data.frame", row.names = c(NA, -3L))
df2 <- structure(list(PropertyValue = c(927346L, 12345L, 87492L, 12734L,
73642L)), .Names = "PropertyValue", class = "data.frame", row.names = c(NA,
-5L))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句