在使用管道`%>%`时,如何为行名分配<<-?

时间:2019-05-07 02:26:56

标签: r magrittr

我们可以使用<-运算符和rownames(df)来分配数据帧的行名,如下所示:

df<-data.frame(a=letters[1:5], b=1:5, c=LETTERS[1:5])
df
rownames(df) <- df[,1]
df[,1] <- NULL
df

上面的脚本会将第一列转换为行名,输出如下:

df
  a b c
1 a 1 A
2 b 2 B
3 c 3 C
4 d 4 D
5 e 5 E

df
  b c
a 1 A
b 2 B
c 3 C
d 4 D
e 5 E 

是否可以使用管道%>%来做到这一点?

我尝试了df %>% rownames(.) <- .[,1],但失败了。
关键问题是无法在<-

之间使用%>%

3 个答案:

答案 0 :(得分:10)

虽然<-运算符看起来很特别,但实际上它是`rownames<-`()函数的快捷方式,您可以直接在管道中调用它:

data.frame(a=letters[1:5], b=1:5, c=LETTERS[1:5]) %>%
    `rownames<-`(.[,1])

  a b c
a a 1 A
b b 2 B
c c 3 C
d d 4 D
e e 5 E

这是分配行名时实际上一直使用的功能:

# When you write this
rownames(df) <- c(1:5)

# What R is actually doing is running this function:
`rownames<-`(df, c(1:5))

您也可以使用`colnames<-`()`names<-`()做同样的事情

反引号字符(`)将某些内容定义为符号,即使该符号中包含非法符号也是如此。将其括在反引号中将告诉R您正在运行一个名为rownames<-的函数,并将.[,1]作为参数传递。如果没有它,R将在到达<符号时停止读取函数名称,并寻找普通的rownames函数,这不是我们想要的。

阅读此问题,以获取有关反引号语法的更多详细信息:What do backticks do in R?

答案 1 :(得分:2)

df <- data.frame(a = letters[1:5], b = 1:5, c = LETTERS[1:5])
df
> df
  a b c
1 a 1 A
2 b 2 B
3 c 3 C
4 d 4 D
5 e 5 E
library(dplyr)
library(tibble)
df1 <- df %>% 
  tibble::column_to_rownames(var = "a")
df1  
> df1
  b c
a 1 A
b 2 B
c 3 C
d 4 D
e 5 E

答案 2 :(得分:1)

无需使用任何其他软件包,您可以通过这样做获得相同的结果

const { Map } = google.maps;
const div2 = new HTMLDivElement();
const map2 = new Map(div2);

通过df1 <- data.frame(df[-1], row.names = df[,1]) df1 # b c #a 1 A #b 2 B #c 3 C #d 4 D #e 5 E ,您可能只需dplyr列中的值即可分配给pull

rownames