是否有更有效的方法将24列组合成一个列,作为R中的数组

时间:2018-09-07 16:22:45

标签: arrays r

下面有一个代码,该代码可以处理24列(小时)的数据,并将其组合为数据帧中每一行的单个列数组:

# Adds all of the values into column twentyfourhours with "," as the separator.
agg_bluetooth_data$twentyfourhours <- paste(agg_bluetooth_data[,1],
agg_bluetooth_data[,2], agg_bluetooth_data[,3], agg_bluetooth_data[,4],
agg_bluetooth_data[,5], agg_bluetooth_data[,6], agg_bluetooth_data[,7],
agg_bluetooth_data[,8], agg_bluetooth_data[,9], agg_bluetooth_data[,10],
agg_bluetooth_data[,11], agg_bluetooth_data[,12], agg_bluetooth_data[,13],
agg_bluetooth_data[,14], agg_bluetooth_data[,15], agg_bluetooth_data[,16],
agg_bluetooth_data[,17], agg_bluetooth_data[,18], agg_bluetooth_data[,19],
agg_bluetooth_data[,20], agg_bluetooth_data[,21], agg_bluetooth_data[,22],
agg_bluetooth_data[,23], agg_bluetooth_data[,24], sep=",")

但是,在此之后,我仍然必须编写更多代码行以删除空格,在括号周围添加括号并删除列。这些都不是很难做到的,但是我觉得应该使用较短/更干净的代码来获得我想要的结果。有人有建议吗?

2 个答案:

答案 0 :(得分:1)

有一个内置函数可以执行rowSums。看起来您想要类似的rowPaste函数。我们可以使用apply

# create example dataset
df <- data.frame(
    v=1:10,
    x=letters[1:10],
    y=letters[6:15],
    z=letters[11:20],
    stringsAsFactors = FALSE
)

# rowPaste columns 2 through 4
apply(df[, 2:4], 1, paste, collapse=",")

答案 1 :(得分:0)

使用@Dan Y的数据的另一种选择(但是,如果您使用dput发布了部分数据,则可能会有所帮助。)

library(tidyr)
library(dplyr)

df %>% 
  unite('new_col', v, x, y, z, sep = ',') 

    new_col
1   1,a,f,k
2   2,b,g,l
3   3,c,h,m
4   4,d,i,n
5   5,e,j,o
6   6,f,k,p
7   7,g,l,q
8   8,h,m,r
9   9,i,n,s
10 10,j,o,t

然后可以使用mutate执行必要的编辑。 unite调用中的列选择还具有相当大的灵活性。查看the select documentation.

的“有用的功能”部分