Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在r中将一列划分为两列_R - Fatal编程技术网

如何在r中将一列划分为两列

如何在r中将一列划分为两列,r,R,我有这样一个数据框: v1 v2 v3 1 A ddd 5 2 A ddd 7 3 B ccc 8 4 B ccc 8 5 C aaa 9 6 C aaa 11 但我希望它是这样的: v1 v2 v3.1 v3.2 1 A ddd 5 7 2 B ccc 8 8 3 C aaa 9 11 谢谢你的帮助 dfnew您可以使用dplyr和tidyr使用类似的东西: dfnew <- a

我有这样一个数据框:

  v1  v2 v3
1  A ddd  5
2  A ddd  7
3  B ccc  8
4  B ccc  8
5  C aaa  9
6  C aaa 11
但我希望它是这样的:

  v1  v2   v3.1   v3.2
1  A   ddd    5      7
2  B   ccc    8      8
3  C   aaa    9     11

谢谢你的帮助

dfnew您可以使用dplyr和tidyr使用类似的东西:

dfnew <- aggregate(v3 ~ v1 + v2, df, I)
dfnew[order(dfnew$v1),]
  v1  v2 v3.1 v3.2
3  A ddd    5    7
2  B ccc    8    8
1  C aaa    9   11


df <- read.table(text = "
v1  v2 v3
1  A ddd  5
                 2  A ddd  7
                 3  B ccc  8
                 4  B ccc  8
                 5  C aaa  9
                 6  C aaa 11", h = T)
library(tidyr)
library(dplyr)

df1 %>% 
  group_by(v1) %>% 
  mutate(new = paste("v3", row_number(), sep = ".")) %>% 
  spread(new, v3)

# A tibble: 3 x 4
# Groups:   v1 [3]
  v1    v2     v3.1  v3.2
  <chr> <chr> <int> <int>
1 A     ddd       5     7
2 B     ccc       8     8
3 C     aaa       9    11
library(tidyr)
图书馆(dplyr)
df1%>%
分组依据(v1)%>%
突变(新=粘贴(“v3”,行号(),sep=“.”)”)%>%
排列(新,v3)
#一个tibble:3x4
#分组:v1[3]
v1.1 v3.2
1 ddd 5 7
2 B ccc 8
3 C aaa 9 11
数据:


df1仅当您的数据按
V2
排序并且
V2
的每个值重复相同次数(此处为2次)时,此操作才有效


您是否尝试过并失败过?相关:
df1 <- structure(list(v1 = c("A", "A", "B", "B", "C", "C"), v2 = c("ddd", 
"ddd", "ccc", "ccc", "aaa", "aaa"), v3 = c(5L, 7L, 8L, 8L, 9L, 
11L)), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "6"))
cbind(df[seq(1, nrow(df), by=2),], df[seq(2, (nrow(df)), by=2),])[,c(4,5)*-1]

  v1  v2 v3 v3.1
1  A ddd  5    7
3  B ccc  8    8
5  C aaa  9   11