【问题标题】:How to perform calculations on the same variable based on factor levels of 2 other variables?如何根据其他 2 个变量的因子水平对同一变量进行计算?
【发布时间】:2013-11-30 22:02:06
【问题描述】:

我在数据框中有以下信息

  Gender  EducationLevel   Income(mean) 
   Male     Low             10
   Male     High            12
   Female   Low

我想创建一个单独的变量,我将在其中减去属于高教育水平和低教育水平的男性之间的平均收入(然后对女性做同样的事情)。 不手动怎么可能通过R代码?

我很困惑,因为有两个 if 子句:如果 Gender 是 Male 然后减去 (EducationLevel="High")-(EducationLevel="Low"), (Gender == "Male") 的收入(平均值)

新变量将如下所示(不再包含 EducationLevel 信息):

   Gender  Difference
    Male      2
    Female    3

任何帮助将不胜感激,我曾想过使用 lapply,但我在 R 方面的经验不足,无法成功 我不确定如何在 (EducationLevel="High")-(EducationLevel="Low") 计算中设置变量 Income(mean)。

【问题讨论】:

  • 您还应该提供 Gender Female 的原始虚拟数据。

标签: r


【解决方案1】:

鉴于您的原始数据的排序方式,您可以使用aggregatediff

df <- read.table(text = "Gender  EducationLevel   Income(mean) 
Male     Low             10
Male     High            12
Female   Low 7
Female High 10", header = TRUE)

df   

请注意,“Income(mean)”不是语法上有效的变量名,而是由read.table 转换的。请参阅 ?read.table 中的 check.names 参数。

setNames(aggregate(Income.mean. ~ Gender, data = df, diff), c("Gender", "Difference"))

#   Gender  Difference
# 1 Female           3
# 2   Male           2

【讨论】:

  • 谢谢!它工作得很好!虽然不确定它是如何做到的,因为我没有在任何地方提到变量 EducationLevel ...,但它仍然有效。我知道 () 不能用作变量名。
【解决方案2】:

我使用简化的符号,但本质上这就是你必须做的:

> df <- data.frame(g = c("m","m","f","f"), e = c("h","l","h","l"), i = sample(4,4))

> df
  g e i
1 m h 1
2 m l 4
3 f h 2
4 f l 3

> mean(df[df$g == "m" & df$e == "h","i"]) - mean(df[df$g == "m" & df$e == "l","i"])
[1] -3

> mean(df[df$g == "f" & df$e == "h","i"]) - mean(df[df$g == "f" & df$e == "l","i"])
[1] -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多