Как преобразовать массив символов во фрейм данных - PullRequest
1 голос
/ 01 июня 2019

У меня есть массив символов, который я хочу преобразовать во фрейм данных df, но он не работает

 head(dat)
[1] "   1931   1    5.0     0.6      11    78.4    43.4"
[2] "   1931   2    6.7     0.7       7    48.9    63.6"
[3] "   1931   4   10.4     3.1       3    44.6   110.1"
[4] "   1931   5   13.2     6.1       1    63.7   167.4"
[5] "   1931   6   15.4     8.0       0    87.8   150.3"
[6] "   1931   7   17.3    10.6       0   121.4   111.2"

> df<-as.data.frame(dat)
> head(df)
                                                 dat
1    1931   1    5.0     0.6      11    78.4    43.4
2    1931   2    6.7     0.7       7    48.9    63.6
3    1931   4   10.4     3.1       3    44.6   110.1
4    1931   5   13.2     6.1       1    63.7   167.4
5    1931   6   15.4     8.0       0    87.8   150.3
6    1931   7   17.3    10.6       0   121.4   111.2




df[,c(3)]

Ошибка в [.data.frame (df,, c (3)): выбраны неопределенные столбцы

Ответы [ 3 ]

1 голос
/ 01 июня 2019

Чтение с read.table: Вы можете rename по желанию.

df<-read.table(text = "                                                dat
1    1931   1    5.0     0.6      11    78.4    43.4
2    1931   2    6.7     0.7       7    48.9    63.6
3    1931   4   10.4     3.1       3    44.6   110.1
4    1931   5   13.2     6.1       1    63.7   167.4
5    1931   6   15.4     8.0       0    87.8   150.3
6    1931   7   17.3    10.6       0   121.4   111.2",
               header=F,fill=T,as.is=T,skip = 1)
df[3]
 V3
1  1
2  2
3  4
4  5
5  6
6  7
0 голосов
/ 01 июня 2019

Вот подход tidyverse:

dat <- c("   1931   1    5.0     0.6      11    78.4    43.4",
         "   1931   2    6.7     0.7       7    48.9    63.6",
         "   1931   4   10.4     3.1       3    44.6   110.1",
         "   1931   5   13.2     6.1       1    63.7   167.4",
         "   1931   6   15.4     8.0       0    87.8   150.3",
         "   1931   7   17.3    10.6       0   121.4   111.2")

library(tidyverse)
str_trim(dat) %>%     # trim leading space
  tibble(x = .) %>%   # put into tibble (data.frame)
  separate(x,         # separate x into 7 columns, named below
           into = c("year","v1","v2","v3","v4","v5","v6"), 
           sep = "[ ]{1,}")  # separate by one or more spaces ("[ ]{1,}")

Это приводит к:

# A tibble: 6 x 7
  year  v1    v2    v3    v4    v5    v6   
  <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1931  1     5.0   0.6   11    78.4  43.4 
2 1931  2     6.7   0.7   7     48.9  63.6 
3 1931  4     10.4  3.1   3     44.6  110.1
4 1931  5     13.2  6.1   1     63.7  167.4
5 1931  6     15.4  8.0   0     87.8  150.3
6 1931  7     17.3  10.6  0     121.4 111.2
0 голосов
/ 01 июня 2019

Если dat - это то, что воспроизводимо показано в примечании в конце, тогда as.data.frame(dat) создает фрейм данных с одним столбцом с именем dat, а затем, когда есть попытка взять 3-й столбец, возникает ошибка, посколькутолько один столбец.

Вместо этого используйте read.table и получите третий столбец, подобный этому.Опустите запятую, если хотите получить результат для фрейма данных.

read.table(text = dat)[, 3]
## [1]  5.0  6.7 10.4 13.2 15.4 17.3

Примечание

dat <- c("   1931   1    5.0     0.6      11    78.4    43.4",
  "   1931   2    6.7     0.7       7    48.9    63.6",
  "   1931   4   10.4     3.1       3    44.6   110.1",
  "   1931   5   13.2     6.1       1    63.7   167.4",
  "   1931   6   15.4     8.0       0    87.8   150.3",
  "   1931   7   17.3    10.6       0   121.4   111.2")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...