我的数据如下:
>dput(mea)
>structure(list(mea = c(NA, NA, NA, NA, 7.5, 19.5)), .Names = "mea",
row.names = c(NA,-6L), class = "data.frame")
和
>dput(m1)
>structure(list(t = c(5e-04, 0.001, 0.0015, 0.002, 0.0025, 0.003,
0.0035, 0.004, 0.0045, 0.005, 0.0055, 0.006, 0.0065, 0.007, 0.0075,
0.008, 0.0085, 0.009, 0.0095, 0.01, 0.0105, 0.011, 0.0115, 0.012,
0.0125, 0.013, 0.0135, 0.014, 0.0145, 0.015), a = c(21L, 13L,
17L, 20L, 19L, 9L, 11L, 16L, 28L, 10L, 14L, 12L, 15L, 27L, 30L,
6L, 29L, 22L, 24L, 5L, 25L, 18L, 26L, 1L, 3L, 4L, 23L, 8L, 7L,
2L), b = c(1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1,
1, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1), c = c(19L, 25L, 14L,
18L, 3L, 4L, 5L, 6L, 8L, 20L, 17L, 13L, 28L, 2L, 29L, 15L, 26L,
12L, 24L, 16L, 9L, 1L, 22L, 27L, 21L, 23L, 11L, 10L, 7L, 30L),
`4` = c(NA, NA, NA, 18L, 3L, 4L, 5L, 6L, 8L, 20L, 17L, 13L,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), `17` = c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, 26L, 12L, 24L, 16L, 9L, 1L, 22L,
27L, 21L, NA, NA, NA, NA, NA), `<NA>` = c(NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_)), class = "data.frame",
row.names = c(NA,30L), .Names = c("t", "a", "b", "c", "4", "17", "<NA>"))
我要做的是将mea
的rownames与m1
的列名相匹配,然后从{{1}的整列中减去mea
的相应值}(与m1
的rowname相匹配)。
我做的是:
mea
我从这里提出的问题得到了这个: https://stackoverflow.com/a/18077661/5681674
它可以解决问题,但方法错误。它从 mea1<-na.omit(mea)
idx <- match(rownames(mea1) , 1:ncol(m1))
m5 <- cbind((m1[,idx] - mea[idx,]), m1[,-idx])
的第一个匹配列中减去mea
的第二个(最后一个值),从m1
的第二个匹配列中减去mea
的第一个值。但它应该是正确的顺序。
我读到m1
从头到尾工作的地方,问题就在这里吗?我该如何解决?
提前谢谢!
祝你好运, 克里斯
答案 0 :(得分:1)
问题是你试图从data.frame
中减去一个向量,以便向量元素被回收。它实际上并没有减去&#34;错误&#34;中的元素。方向(即第1列的19.5
和第2列的7.5
。相反,正在发生的是19.5
和7.5
正在以交替的顺序从每列中减去(因为元素正在被回收以适应列的长度。
例如,与head((m1[,idx] - mea[idx,]))
相比,查看head(m1[,idx])
。您会看到第4行是-1.5
或18 - 19.5
,第5行是-4.5
或3 - 7.5
。
要解决此问题,您可以改为使用mapply
:
m5 <- cbind(mapply("-", m1[,idx], mea[idx,]), m1[,-idx])
现在,如果我们看一下head(m5[,c(1,2)])
,我们就会看到:
4 17
1 NA NA
2 NA NA
3 NA NA
4 10.5 NA
5 -4.5 NA
6 -3.5 NA
或者从整个第一列中正确地减去7.5
。如果您检查第二列,您还会看到正在从整个列中正确地删除19.5