将列表转换为R中具有多个列的数据框

时间:2020-06-26 16:57:50

标签: r web-scraping

我有一个名称和类别的列表,如下所示:

Name
Country
Role
Type
Position
A
USA
P
I
SZ
B
India
R
E
DS
C
USA
H
I
FG
D
France
P
S
RTG
E
USA
R
I
ZA
F
India
H
E
SFG
G
USA
Z
I
DFZ
H
France
Z
S
FSZ

我想用R表示如下

Column1  Column2   Column3  Column4  Column5
A        USA       P        I        SZ
B        India     R        E        DS
C        USA       H        I        FG
D        France    P        S        RTG
E        USA       R        I        ZA
F        India     H        E        SFG
G        USA       Z        I        DFZ
H        France    Z        S        FSZ

我知道如何在Excel中使用以下公式进行操作:

= INDEX($ A:$ A,ROW(A1)* 5-5 + COLUMN(A1))

我不知道如何在R中做到这一点。

谢谢

2 个答案:

答案 0 :(得分:1)

这里是尝试使用tidyverse并假设您的字符串看起来像这样:

"Name\nCountry\nRole\nType\nPosition\nA\nUSA\nP\nI\nSZ\nB\nIndia\nR\nE\nDS\nC\nUSA\nH\nI\nFG\nD\nFrance\nP\nS\nRTG\nE\nUSA\nR\nI\nZA\nF\nIndia\nH\nE\nSFG\nG\nUSA\nZ\nI\nDFZ\nH\nFrance\nZ\nS\nFSZ"

在R控制台中。

library(tidyverse)
mystring <- "Name\nCountry\nRole\nType\nPosition\nA\nUSA\nP\nI\nSZ\nB\nIndia\nR\nE\nDS\nC\nUSA\nH\nI\nFG\nD\nFrance\nP\nS\nRTG\nE\nUSA\nR\nI\nZA\nF\nIndia\nH\nE\nSFG\nG\nUSA\nZ\nI\nDFZ\nH\nFrance\nZ\nS\nFSZ" 
dd <- mystring %>% 
  str_split("\\n") %>%
  first() %>% 
  matrix(ncol = 5, byrow = TRUE)

仍然需要提取第一行并使用colnames(dd) <- 将其分配给您的列名,请参见?colnames

答案 1 :(得分:0)

基本R:

# data    
s <- "Name\nCountry\nRole\nType\nPosition\nA\nUSA space\nP space\nI\nSZ\nB\nIndia\nR\nE\nDS\nC\nUSA\nH\nI\nFG\nD\nFrance\nP\nS\nRTG\nE\nUSA\nR\nI\nZA\nF\nIndia\nH\nE\nSFG\nG\nUSA\nZ\nI\nDFZ\nH\nFrance\nZ\nS\nFSZ"

n_col <- 5
df <- read.table(text = s, sep="\n")
n_row <- nrow(df)/n_col

df <- as.data.frame(matrix(df$V1, n_row, n_col, byrow=TRUE))[-1,]

输出

V1     V2 V3 V4  V5
1  A    USA  P  I  SZ
2  B  India  R  E  DS
3  C    USA  H  I  FG
4  D France  P  S RTG
5  E    USA  R  I  ZA
6  F  India  H  E SFG
7  G    USA  Z  I DFZ
8  H France  Z  S FSZ