R:通过添加前两列的值来创建列

时间:2014-02-10 19:05:08

标签: r

我在R.工作。我输入了命令:

table(shoppingdata$Identifier, shoppingdata$Coupon)

我有以下数据:

           FALSE TRUE
  197386     0    5

  197388     0    2

  197390     2    0

  197392     0    3

  197394     1    0

  197397     0    1

  197398     1    1

  197400     0    4

  197402     1    5

  197406     0    5
  1. 首先,我不能用其他东西命名向量FALSE和TRUE,例如couponused。

  2. 最重要的是,我想创建一个第三列,它是FALSE + TRUE的总和(使用的优惠券+未使用的优惠券=访问次数)。实际列包含数百个条目。

  3. 解决方案根本不明显。

1 个答案:

答案 0 :(得分:2)

你已经偶然发现了R数据类型的深渊,而不是你自己的错误。

假设shoppingdata是数据框,

table(shoppingdata$Identifier, shoppingdata$Coupon)

创建一个“table”类型的对象。人们会认为使用,例如

as.data.frame(table(shoppingdata$Identifier, shoppingdata$Coupon))

会将其转换为与打印输出格式相同的数据框,但是,如下例所示,它没有!

# example
data <- data.frame(ID=rep(1:5,each=10),coupon=(sample(c(T,F),50,replace=T)))
# creates "contingency table", not a data frame.
t <- table(data)
t
#    coupon
# ID  FALSE TRUE
#   1     5    5
#   2     3    7
#   3     4    6
#   4     6    4
#   5     3    7

as.data.frame(t)  # not useful!!
#    ID coupon Freq
# 1   1  FALSE    5
# 2   2  FALSE    3
# 3   3  FALSE    4
# 4   4  FALSE    6
# 5   5  FALSE    3
# 6   1   TRUE    5
# 7   2   TRUE    7
# 8   3   TRUE    6
# 9   4   TRUE    4
# 10  5   TRUE    7

# this works...
coupons  <- data.frame(ID=rownames(t),not.used=t[,1],used=t[,2])
# add two columns to make a third
coupons$total <- coupons$used + coupons$not.used
# or, less typing
coupons$ total <- with(coupons,not.used+used)

FWIW,我认为你的问题非常合理。更多人不使用R的原因是它的学习曲线非常陡峭,文档也不是很好。另一方面,一旦你攀登了学习曲线,R就会非常强大。