3

以下是失败的调用、错误消息和一些显示有问题的长度:

it <- tapply(molten, c(molten$Activity, molten$Subject, molten$variable), mean)
# Error in tapply(molten, c(molten$Activity, molten$Subject, molten$variable),  : 
#  arguments must have same length

length(molten$Activity)
# [1] 679734

length(molten$Subject)
# [1] 679734

length(molten$variable)
# [1] 679734

dim(molten)
# [1] 679734      4

str(molten)
# 'data.frame': 679734 obs. of  4 variables:
#  $ Activity: Factor w/ 6 levels "WALKING","WALKING_UPSTAIRS",..: 5 5 5 5 5 5 5 5 5 5 ...
#  $ Subject : Factor w/ 30 levels "1","2","3","4",..: 2 2 2 2 2 2 2 2 2 2 ...
#  $ variable: Factor w/ 66 levels "tBodyAcc-mean()-X",..: 1 1 1 1 1 1 1 1 1 1 ...
#  $ value   : num  0.257 0.286 0.275 0.27 0.275 ...
4

3 回答 3

7

如果你看一下,?tapply你会发现它X应该是“一个原子对象,通常是一个向量”。您tapply使用不是原子对象的数据框(“熔体”)提供数据。看看is.atomic,然后尝试is.atomic(molten)。此外,您的分组变量应作为list(见INDEX参数)提供。

像这样的工作:

tapply(X = warpbreaks$breaks,  INDEX = list(warpbreaks$wool, warpbreaks$tension), mean)
#          L        M        H
# A 44.55556 24.00000 24.55556
# B 28.22222 28.77778 18.77778 
于 2014-04-25T20:47:41.200 回答
1

您需要为 INDEX 提供一个对象,但c( )会将它们全部串在一起,这是错误的来源,因此请使用列表:

it <- tapply(molten$value, list(Act=molten$Activity, sub=molten$Subject, var=molten$variable), mean)

更好的是:

it <- with(molten , tapply(value, list(Act=Activity, Sub=Subject, var=variable), mean) )
于 2014-04-25T20:47:21.247 回答
0

有没有解决这个问题?因为我在读取 CSV 文件时遇到了同样的问题,并且可以通过将原始 CSV 文件保存为 CSV(分隔符分隔)而不是 CSV(分隔符分隔符 -UTF-8)来解决该问题。我的数据集中有德语元音变音,所以这也可能起作用。

于 2021-08-26T14:19:52.167 回答