【发布时间】:2016-10-21 19:22:40
【问题描述】:
我有一个包含 10 个变量(ID1 - 1D10)的数据框,每个变量都有 5 个 x 值(A、B、C、D、E):
library(plotly)
library(data.table)
set.seed(1)
dat <- data.frame(ID = paste0("ID",1:10), A = runif(10), B = runif(10), C = runif(10), D = runif(10), E = runif(10))
dat$ID <- as.character(dat$ID)
datt <- data.frame(t(dat))
names(datt) <- as.matrix(datt[1, ])
datt <- datt[-1, ]
datt[] <- lapply(datt, function(x) type.convert(as.character(x)))
setDT(datt, keep.rownames = TRUE)[]
colnames(datt)[1] <- "x"
dat_long <- melt(datt, id.vars ="x" )
这将创建以下格式的数据框(这是它的前 7 行):
x variable value
1: A ID1 0.2655087
2: B ID1 0.2059746
3: C ID1 0.9347052
4: D ID1 0.4820801
5: E ID1 0.8209463
6: A ID2 0.3721239
7: B ID2 0.1765568
我只是想从这个数据框中只抓取具有 ID1 或 ID2 可变值的行。这应该产生 10 行(因为每个 ID 有 5 个 x 值 A、B、C、D、E)。但是,在这样做时:
dat_long[dat_long$variable==c("ID1","ID2"),]
我只收到 6 行。具体来说,我只收到 5 个 x 值中的 3 个(A、C、E):
x variable value
1: A ID1 0.2655087
2: C ID1 0.9347052
3: E ID1 0.8209463
4: A ID2 0.3721239
5: C ID2 0.2121425
6: E ID2 0.6470602
我尝试将数据框的变量列从一个Factor改成一个字符,如下:
dat_long$variable = as.character(dat_long$variable)
dat_long[dat_long$variable==c("ID1","ID2"),]
但这会导致完全相同的问题。当我运行 which() 命令时,我仍然看到同样的问题:
which(dat_long$variable==c("ID1","ID2"),)
您对如何解决这个问题有什么建议吗?当我这样做时:
str(c("ID1","ID2"))
我得到以下信息:
chr [1:2] "ID1" "ID2"
我可能需要将 ID 的密钥保留为上述格式。原因是我使用的是 Shiny 应用程序,ID 键的输入值是这种格式。 ID 密钥有时可能是不同的组合和数字。例如,输入可能有三个 ID(例如:c("ID1", "ID2", "ID5"))。因此,我需要使用上述格式的字符数组作为 ID 键导出解决方案。
任何建议将不胜感激!
【问题讨论】:
-
...
%in% c("ID1","ID2")