我有一些看起来像这样的数据:
country agdp apop
1 US 100 100
2 Australia 50 50
变量名称为agdp
和apop
,但我希望它们分别为gdp
和pop
。我的真实数据有很多变数,都需要进行转换。
这就是我想要的结果:
country gdp pop
1 US 100 100
2 Australia 50 50
下面的可复制代码:
df <- data.frame(stringsAsFactors=FALSE,
country = c("US", "Australia"),
agdp = c(100, 50),
apop = c(100, 50)
desired_df <- data.frame(stringsAsFactors=FALSE,
country = c("US", "Australia"),
gdp = c(100, 50),
pop = c(100, 50)
答案 0 :(得分:4)
使用var list = new List<Question>
{
new Question()
{
question = "Question1",
option = new string[] { "abc", "cde", "efg"},
score = new string[] { "abc", "cde", "efg" }
},
new Question(){},
new Question(){},
new Question(){}
};
,我们可以提取除第一个字符以外的所有内容并分配名称。
regex
答案 1 :(得分:3)
一种dplyr
可能是:
df %>%
rename_at(2:length(.), list(~ substr(., 2, nchar(.))))
country gdp pop
1 US 100 100
2 Australia 50 50
与base R
相同:
names(df)[-1] <- substr(names(df)[-1], 2, nchar(names(df)[-1]))
答案 2 :(得分:3)
这是一种方法
library(stringr)
names(df)[-1] = str_sub(names(df)[-1], 2)
答案 3 :(得分:1)
一个人也可以做:
仅使用base
(可以使用setdiff
或%in%
来“自动”选择。):
sapply(names(df), function(x) ifelse(x=="country",x,substring(x,2,nchar(x))))
自tidyverse
以来,rename_at
显得格外优雅:
names(df)<-unlist(names(df) %>%
map(.,function(x) ifelse(x=="country",x,substring(x,2,nchar(x)))))