下面有一个代码,该代码可以处理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=",")
但是,在此之后,我仍然必须编写更多代码行以删除空格,在括号周围添加括号并删除列。这些都不是很难做到的,但是我觉得应该使用较短/更干净的代码来获得我想要的结果。有人有建议吗?
答案 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.