当我能够使用不同的功能时,我真的无法理解.我总是有同样的问题......"它不适用于原子矢量,数据帧,矩阵......等等.
有人可以解释我如何减去两列矩阵或data.frame或任何东西......
这是我的数据:
id cond S1.pre S2.pre S1.post S2.post V1.pre V2.pre V1.post V2.post
1 aer 21 31 25 35 7 1 19 4
2 aer 15 26 21 29 13 11 16 14
3 aer 18 27 23 31 8 2 3 3
4 aer 17 31 18 39 13 11 15 14
5 aer 15 26 16 29 26 15 32 20
Run Code Online (Sandbox Code Playgroud)
我想减去列S1.post - S1.pre.
这就是我试过的:
> diff <- data[,"S1.post"] - data[,"S1.pre"]
Error in data[, "S1.post"] - data[, "S1.pre"] :
non-numeric argument to binary operator
> diff <- data$S1.post - data$S1.pre
Error in data$S1.post : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)
类别:
> class("S1.pre")
[1] "character"
> class("data")
[1] "character"
Run Code Online (Sandbox Code Playgroud)
我想你可能有两个问题:
首先要么你认为你有一个data.frame实际上你有一个矩阵,或者你的数据在某个时刻是一个矩阵,现在是data.frame所有预期的数值转换为字符,然后factor在返回数据的途中转换为.帧.
如果你的数据是一个矩阵,$不访问定义matrices因此"$ operator is invalid for atomic vectors"错误.其次,如果你有一个矩阵,并且a中的所有数据matrix 必须是同一类型,那么你的所有列都是类型character.
如果你键入class( data )我会期望它会返回"matrix".
我会转换为data.frame,然后转换相应的列以integer供进一步使用...
data <- as.data.frame( data )
data2 <- do.call( data.frame , c(data[,1:2] , lapply( data[,-c(1:2)] , as.integer ) ) )
Run Code Online (Sandbox Code Playgroud)
希望你会看到......
sapply( data2 , class )
# id cond S1.pre S2.pre S1.post S2.post V1.pre V2.pre V1.post V2.post
# "factor" "factor" "integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer"
Run Code Online (Sandbox Code Playgroud)