我希望实现下表所示的输出。
有人可以帮忙上面的代码吗?任务主要是关于如何 通过使用功能插入新列。但是我不确定是否必须使用mutate_at。错误的长度> 1,我对此一无所知。
谢谢!
## I would like to achieve the output as follow
## A B C best
## 1 2 4 Par
## 2 3 1 Lab
## 3 4 9 Par
## 4 1 0 Edu
## I tried the following codes, however, it didnt work
Library("dplyr")
Library("tidyr")
data <- data.frame(A = c(1,2,3,4),
B = c(2,3,4,1),
C = c(4,1,9,0))
best <- function(x,y,z){
if ((x>y)&(x>z)){
print("Edu")
if ((y>x)&(y>z))
print("Lab")
if ((z>x)&(z>y))
print("Par")
}
}
data_new <- mutate_at(data, vars(A:C), funs(best))
请问我该如何解决
答案 0 :(得分:0)
怎么样
data_new <- data %>%
mutate(
best = case_when(
A>B & A>C ~ "Edu",
B>A & B>C ~ "Lab",
C>A & C>B ~ "Par",
TRUE ~ NA_character_
)
)
对于您来说,独立于列名进行工作是否重要?
答案 1 :(得分:0)
best <- function(x,y,z){
if ((x>y)&(x>z)){
"Edu" } else if ((y>x)&(y>z)){
"Lab" } else if ((z>x)&(z>y)){
"Par"
}
}
library(dplyr)
data %>% rowwise() %>% mutate(best=best(A,B,C))
我认为您无法使用mutate_at
,请参见?mutate_at
。我们需要rowwise()
,因为best
不是向量化函数。
答案 2 :(得分:0)
可以通过使用pmap避免行进。
cat |