2017-07-31 168 views
1

執行所選列算術,我有以下的數據幀:你如何使用dplyr

df <- structure(list(gene_id = c("ATP1B1", "CYCS", "DDX5", "GNB2L1", 
"PRR11"), BoneMarrow = c(0, 0, 0, 31138, 2703), Pulmonary = c(3380, 
21223.3333333333, 0, 0, 0), Umbilical = c(233, 0, 15397, 0, 0 
)), .Names = c("gene_id", "BoneMarrow", "Pulmonary", "Umbilical" 
), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-5L), vars = "gene_id", labels = structure(list(gene_id = c("ATP1B1", 
"CYCS", "DDX5", "GNB2L1", "PRR11")), class = "data.frame", row.names = c(NA, 
-5L), vars = "gene_id", drop = TRUE, .Names = "gene_id"), indices = list(
    0L, 1L, 2L, 3L, 4L), drop = TRUE, group_sizes = c(1L, 1L, 
1L, 1L, 1L), biggest_group_size = 1L) 
df 

,看起來像這樣:

# A tibble: 5 x 4 
# Groups: gene_id [5] 
    gene_id BoneMarrow Pulmonary Umbilical 
    <chr>  <dbl>  <dbl>  <dbl> 
1 ATP1B1   0 3380.00  233 
2 CYCS   0 21223.33   0 
3 DDX5   0  0.00  15397 
4 GNB2L1  31138  0.00   0 
5 PRR11  2703  0.00   0 

我可以做以下含底座辦法:

ndf <- as.data.frame(df) 
rownames(ndf) <- df$gene_id 
ndf$gene_id <- NULL 
ndf <- ndf + 1 
ndf 

得到這個:

 BoneMarrow Pulmonary Umbilical 
ATP1B1   1 3381.00  234 
CYCS   1 21224.33   1 
DDX5   1  1.00  15398 
GNB2L1  31139  1.00   1 
PRR11  2704  1.00   1 

我該怎麼做dplyr鏈?

+0

不要ü想'rownames'呢? – akrun

+0

@akrun是的我想要它。 – neversaint

+0

你不能在tibble – akrun

回答

2

您可以使用mutate_if目標,並添加1到所有的數值變量。該tibble功能column_to_rownames可以再tibble轉換成數據幀後應用,即

library(tidyverse) 

df %>% 
mutate_if(is.numeric, funs(. + 1)) %>% 
as.data.frame() %>% 
column_to_rownames(var = 'gene_id') 

其中給出,

 BoneMarrow Pulmonary Umbilical 
ATP1B1   1 3381.00  234 
CYCS   1 21224.33   1 
DDX5   1  1.00  15398 
GNB2L1  31139  1.00   1 
PRR11  2704  1.00   1 
+0

我需要爲所有值執行算術'加1'。 – neversaint

+0

對不起,錯過了。編輯 – Sotos

2

我們可以做

df %>% 
    mutate_at(vars(-one_of('gene_id')), funs(.+1)) %>% 
    as.data.frame() %>% 
    `row.names<-`(.[[1]]) %>% 
    select(-1) 
#   BoneMarrow Pulmonary Umbilical 
#ATP1B1   1 3381.00  234 
#CYCS   1 21224.33   1 
#DDX5   1  1.00  15398 
#GNB2L1  31139  1.00   1 
#PRR11  2704  1.00   1 
+0

上設置'rownames',因爲除了'BoneMarrow「,」Pulmonary「,」Umbilical「以外,我還有許多專欄。我們能否在mutate中否定'gene_id'? – neversaint

+1

@neversaint更新了帖子 – akrun

+0

我收到了警告信息''Unknown variables:'gene_id'' – neversaint