피벗하는 대신 열 대신 행별로 데이터 세트의 값을 반올림 할 수 있습니까? 표준 방법은 mutate_at
또는 지금 사용하여 열을 반올림 하는 across
것이지만 특정 행으로 수행하는 것을 선호합니다.
library(tidyverse)
set.seed(10)
df <- data.frame(let = sample(letters, 20),
x = rnorm(20),
y = rnorm(20) + 10,
z = rnorm(20) + 30)
df
#for rows where "let" = i, j, k, h round to 2 decimal places using ~round(., 2)
round_2 = c("i", "j", "k", "h")
#for rows where "let" = a, b, c, d, e round to decimal places using ~round(., 0)
round_0 = c("a", "b", "c", "d")
#typical type approach with columns
#df %>%
# mutate(across(matches("x|y"), ~round(., 0)))
#df %>%
# mutate(across(matches("z"), ~round(., 2)))
아마 rowwise
여기에 이용 될 수 있을까?
감사
let
열은 mutate 함수 내에서 사용할 수 있으므로 다음을 수행 할 수 있습니다.
df %>%
mutate_at(c('x', 'y', 'z'), ~round(., case_when(
let %in% round_0 ~ 0,
let %in% round_2 ~ 2
)))
대상 dplyr >= 1.0.0
:
df %>%
mutate(across(matches('x|y|z'), ~round(., case_when(
let %in% round_0 ~ 0,
let %in% round_2 ~ 2
))))
결과:
let x y z
1 k -0.71 9.87 29.94
2 i -0.37 9.22 29.81
3 j -1.32 10.09 31.01
4 p NA NA NA
5 l NA NA NA
6 h 1.69 11.77 30.82
7 g NA NA NA
8 s NA NA NA
9 o NA NA NA
10 r NA NA NA
11 x NA NA NA
12 t NA NA NA
13 w NA NA NA
14 b 0.00 10.00 29.00
15 u NA NA NA
16 v NA NA NA
17 q NA NA NA
18 f NA NA NA
19 n NA NA NA
20 c 1.00 11.00 31.00
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다