有没有更好的(即向量化)方法将列名的一部分放入 R 中数据帧的行中
我在 R 中有一个数据框,它是通过对熔化/铸造操作的结果运行一些统计数据而产生的。我想在包含标称值的数据框中添加一行。该标称值出现在每列的名称中,
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 列。有什么想法吗?
I have a data frame in R that has come about from running some stats on the result of a melt/cast operation. I want to add a row into this dataframe containing a Nominal value. That Nominal Value is present in the names for each column
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
So, I want to create a new row, that contains '100' in the column Var A_100 and '5' in Var B_5. Currently this is what I'm doing but I'm sure there must be a better, vectorised way to do this.
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)
Typically I'd have 16-24 columns. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以通过两种方式(至少)创建
temp_nom
:对于分配,您可以将
temp_nom
转换为数字(在其他情况下,它会与列类型混淆)当然您可以这样做它在一行中:
You can create
temp_nom
in two ways (at least):And for assigment you could convert
temp_nom
to numeric (in other case it mess with column types)Of course you can do it in one line: