在by中使用功能-基本问题

时间:2019-02-01 23:56:42

标签: r data.table

我需要了解为什么有时您需要使用“ by”,而有时却不需要。我真的是R和data.table的新手,所以它可能是基本的东西。

a<-c("A","B","C")
b<-c("AA","BBB","CCC")
x1<-c(2,4,8)
x2<-c(2,4,1)
n1<-c(9,9,9)
n2<-c(10,10,10)

DT <-data.table(a,b,x1,x2,n1,n2)

test1 <- DT[,.(y=nchar(b))]
test2 <- DT[,.(pv1=prop.test(c(x1,x2), c(n1,n2))$p.value)]
test3 <- DT[,.(pv1=prop.test(c(x1,x2), c(n1,n2))$p.value), by= 'a']

test1的行为符合我的预期,它返回一个包含3个观察值和1个变量的数据表。

test2使我感到困惑。我只得到1个观察结果

test3是我得到预期答案的方式。

我不明白为什么test2不能像test1那样按行操作。如果要处理表中的每一行,什么时候需要使用by =?

感谢您的帮助,

大卫

1 个答案:

答案 0 :(得分:3)

它确实按行操作。只是,尽管nchar()将向量作为其参数并返回一个向量,但是prop.test(),sum(),mean()等函数会接受一个或多个向量并返回单个值。因此,如果没有'by'参数,该函数将在整个数据表(无子分组)上操作并返回单个值。