我有一个数据集,其中每个具有特定“刺激”条件的“受试者”对于变量“ FOXP3”,“ GATA3”和“ GZMB”具有特定值。我想将“主题”和“刺激”组合在一起,以获得“ FOXP3”,“ GATA3”和“ GZMB”的相应值。
所以数据看起来像这样:
subject stim FOXP3 GATA3 GZMB
TA no stim 0 0.50 0
SA 11002 1 0 0.9
RK 4512 0.3 0.5 0.9
我希望数据看起来像这样
TA+no stim SA+11002 RK+4512
FOXP3 0 1 0.3
GATA3 0.5 0 0.5
GZMB 0 0.9 0.9
我该怎么做?
答案 0 :(得分:0)
这就是我要做的:
library(dplyr)
library(tidyr)
df <- read.table(text =
"subject stim FOXP3 GATA3 GZMB
TA no-stim 0 0.50 0
SA 11002 1 0 0.9
RK 4512 0.3 0.5 0.9", header = T)
df2 <- df %>% unite(col = subject_stim, subject, stim, sep = "+") %>%
{as_tibble(cbind(names = names(.), t(.)))}
colnames(df2)[2:4] <- df2[1,2:4]
df3 <- df2[-1,]
它不是最漂亮,但可以工作。 as_tibble(cbind(names = names(.), t(.)))
来自此question
答案 1 :(得分:0)
使用data.table
,您可以分两步使用melt
和dcast
:
## first melt
df1 <- melt(data = df, id.vars = c('subject','stim'))
df1$col_name = paste(df1$subject,df1$stim, sep = '+')
## then spread
df1 <- dcast(df1, variable ~ col_name, value.var = 'value')
print(df1)
variable RK+4512 SA+11002 TA+no_stim
1: FOXP3 0.3 1.0 0.0
2: GATA3 0.5 0.0 0.5
3: GZMB 0.9 0.9 0.0