r-如何将一个数据帧列除以3,但跳过基于另一列内容的划分



我想把两个数字列都除以3,而不是第三个字符列。

当前数据帧:

col1   col2   col3
100    10     cat
200    20     dog
300    30     NA
desired:
col1   col2   col3
10      1     cat
20      2     dog
300     30     NA

我当前的代码不是基于col3:

DB <- BD %>% mutate(Col1=Col1/3) %>% mutate(Col2s=Col2/3)

请提供解决方案。谢谢

这是一个通过dplyr,的想法

library(dplyr)
df %>% 
mutate_at(vars(-3), list(~ifelse(!is.na(col3), ./10, .)))
#  col1 col2 col3
#1   10    1  cat
#2   20    2  dog
#3  300   30 <NA>

使用基数R.

no <- !is.na(dat$col3)
num <- sapply(dat, is.numeric)
dat[na, num] <- dat[na, num]/10
dat
#   col1 col2 col3
# 1   10    1  cat
# 2   20    2  dog
# 3  300   30 <NA>

数据:

dat <- read.table(header=T, text="col1   col2   col3
100    10     cat
200    20     dog
300    30     NA")

这样试试

library(tidyverse)
df %>% 
pivot_longer(-col3) %>% 
mutate(value = ifelse(!is.na(col3), value / 3, value)) %>% 
pivot_wider(col3, names_from = name, values_from = value)

base R中,如果我们有一个逻辑索引,我们可以直接进行赋值

dat1[1:2][!is.na(dat1$col3),] <- dat1[1:2, !is.na(dat1$col3)]/10

或使用data.table

library(data.table)
setDT(dat1)[is.na(col3), (1:2) := .SD/10, .SDcols = 1:2]

最新更新