dapr mutate column headings - R studio

8ehkhllq  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(71)

在R中执行下面的计算时,列标题作为代码返回。如何分配特定的列标题?

library (dplyr)
it_cs7_fc <- it_cs7 %>%
  mutate((difference_1 = CS7_end - CS7_start))

字符串
输出量:

(difference_1 = CS7_end - CS7_start)              : num  0.0403 0 0.0495 0.2478 0.1796 ...


如何更改列标题?尝试重命名,但没有帮助

it_cs7_fc <- it_cs7 %>%
mutate((difference_1 = CS7_end - CS7_start)%>%
rename(difference_1 = CS7_diff))


谢谢.

oknwwptz

oknwwptz1#

你的括号太多了。
在许多(大多数?)放在R中,额外的一组括号没有害处,通常只是加强代数分组(例如,(1+1)(((1+1)+2)))。然而,在函数调用中,它们可以改变参数的解释方式。
作为一个例子,看看这个函数:

fun <- function(...) {
  dots <- list(...)
  cat(paste("len(Args) :", length(dots)), "\n")
  cat(paste("len(Names):", length(names(dots)), "\n"))
  cat(paste("Names     :", toString(names(dots)), "\n"))
}

字符串
称之为“正常”的方式工作正常:

fun(quux = 1+2)
# len(Args) : 1 
# len(Names): 1 
# Names     : quux


但是,如果我们用一组额外的括号包围参数,我们会看到,虽然仍然有一个参数传递,但它没有命名。在此之前,请快速查看对象quux是否存在于您的本地环境中。(如果存在,请选择另一个不存在的名称.

fun((quux = 1+2))
# len(Args) : 1 
# len(Names): 0 
# Names     :


在使用mutate时,该函数通常要求其所有参数都命名为1(实际上,所有函数调用都将受到这种影响,而不仅仅是在dplyr中)。
现在,查看您的环境,发现quux现在存在,值为3。(在我的dots <- list(...)中),R然后计算...表达式。(它选择不从里到外进行评估,以便支持“懒惰”评估......对于这个答案来说太多了也许吧。)现在我们在fun的“内部”,并希望计算...-表达式,它将表达式(quux = 1+2)视为其第一个(唯一)参数,它在调用上下文中计算(这就是为什么quux是在call_ing_ environment中而不是在函数中调用的原因)。当该表达式被求值时,它的副作用是在调用环境中创建(或覆盖)quux,并将值3存储在其中。现在,表达式本身的值(仅为3,没有名称)作为...-expressions返回。
P.S.
1.从技术上讲,mutate和类似的dplyr动词可以接受未命名的表达式,该表达式的返回值返回一个已经有名称的类似data.frame的对象。例如:

mtcars[1:3,1:4] %>%
  mutate(data.frame(mpg2 = mpg+2, cyl3 = cyl*3))
#                mpg cyl disp  hp mpg2 cyl3
# Mazda RX4     21.0   6  160 110 23.0   18
# Mazda RX4 Wag 21.0   6  160 110 23.0   18
# Datsun 710    22.8   4  108  93 24.8   12


我认为这并不经常使用,至少在SO的问题中没有,在大多数教授dplyr和数据科学的教程中也没有。(对于dplyr-devs,如果这个方法可以扩展到任何list-like对象,而不仅仅是data.frame-objects,那就太好了。)

相关问题