簡體   English   中英

是否有更好的(即矢量化)方法將列名稱的一部分放入R中的數據幀的行中

[英]Is there a better (i.e vectorised) way to put part of a column name into a row of a data frame in R

我在R中有一個數據框,它是通過在熔化/澆鑄操作的結果上運行一些統計數據而產生的。 我想在包含Nominal值的數據框中添加一行。 每個列的名稱中都包含該名義值

df<-as.data.frame(cbind(x=c(1,2,3,4,5),`Var A_100`=c(5,4,3,2,1),`Var B_5`=c(9,8,7,6,5)))
> df
  x Var A_100 Var B_5
1 1         5       9
2 2         4       8
3 3         3       7
4 4         2       6
5 5         1       5

所以,我想創建一個新行,在Var A_100列中包含'100',在Var B_5中包含'5'。 目前這正是我正在做的事情,但我確信必須有一個更好的,矢量化的方式來做到這一點。

temp_nom<-NULL
for (l in 1:length(names(df))){
 temp_nom[l]<-strsplit(names(df),"_")[[l]][2]
 }
temp_nom
[1] NA    "100" "5"  
df[6,]<-temp_nom
> df
     x Var A_100 Var B_5
1    1         5       9
2    2         4       8
3    3         3       7
4    4         2       6
5    5         1       5
6 <NA>       100       5
rm(temp_nom)

通常我會有16-24列。 有任何想法嗎?

您可以通過兩種方式創建temp_nom (至少):

# strsplit create list so you can sapply on it
sapply(strsplit(names(df),"_"), "[", 2)

# using regular expressions:
sub(".+_|[^_]+", "", names(df))

對於temp_nom你可以將temp_nom轉換為數字(在其他情況下,它與列類型混亂)

df[nrow(df)+1,] <- as.numeric(temp_nom)

當然你可以在一行中完成:

df[nrow(df)+1,] <- as.numeric(sapply(strsplit(names(df),"_"), "[", 2))
# or
df[nrow(df)+1,] <- as.numeric(sub(".+_|[^_]+", "", names(df)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM