两列的替代品

Sha*_*ver 1 r

当我能够使用不同的功能时,我真的无法理解.我总是有同样的问题......"它不适用于原子矢量,数据帧,矩阵......等等.

有人可以解释我如何减去两列矩阵或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)

Sim*_*lon 5

你可能有两个问题:

首先要么你认为你有一个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)