我们可以使用<-
运算符和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]
,但失败了。
关键问题是无法在<-
%>%
答案 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