R中的格式未知,如何将其转换为行和列

时间:2018-02-11 11:17:28

标签: r dataframe

我从网上抓了一些东西给我这样的东西:

[1] "(Wirtschaft, 00:00)"       "(Kultur, 23:42)"           "(Sport, 23:38)"            "(Politik, 23:16)"         
  [5] "(Sport, 22:29)"            "(Panorama, 21:56)"         "(Sport, 21:39)"            "(Sport, 21:25)"           
  [9] "(Sport, 20:23)"            "(Politik, 20:21)"          "(Politik, 20:09)"          "(Wissenschaft, 19:41)"    
 [13] "(Politik, 18:43)"          "(Sport, 18:16)"            "(Politik, 17:53)"          "(Wirtschaft, 17:41)"      
 [17] "(Politik, 17:37)"          "(Sport, 17:28)"            "(Sport, 17:09)"            "(Sport, 17:07)"    

我现在想知道的是以下内容。 R怎么看到这个?我现在只想拥有观察(行)和变量(列)。但是,当我使用ncol()或nrow()时,它显示为NULL。有人能告诉我如何操纵日期,以便我有行和列。我知道有单独的功能,所有这一切,但每个人解释它是如此困难,你需要5年的经验来理解它。请帮助初学者学习。感谢

2 个答案:

答案 0 :(得分:1)

一种解决方案可以采用以下步骤:

# Data
v <- c("(Wirtschaft, 00:00)", "(Kultur, 23:42)", "(Sport, 23:38)","(Politik, 23:16)",
 "(Sport, 22:29)","(Panorama, 21:56)","(Sport, 21:39)", "(Sport, 21:25)",
 "(Sport, 20:23)","(Politik, 20:21)","(Politik, 20:09)",
 "(Wissenschaft, 19:41)","(Politik, 18:43)")  

# Solution
library(dplyr)
library(tidyr)

x <- gsub("\\(|\\)", "", v, perl = T) %>% as.data.frame()
colnames(x) <- "Heading"
separate(x, "Heading", c("Item", "Time"), sep = ",")

           Item   Time
1    Wirtschaft  00:00
2        Kultur  23:42
3         Sport  23:38
4       Politik  23:16
5         Sport  22:29
6      Panorama  21:56
7         Sport  21:39
8         Sport  21:25
9         Sport  20:23
10      Politik  20:21
11      Politik  20:09
12 Wissenschaft  19:41

答案 1 :(得分:1)

以下是将您展示的字符串向量转换为data.frame的解决方案,该结构包含行和列:

# Your current vector
scraped <- c("(Wirtschaft, 00:00)", "(Kultur, 23:42)", "(Sport, 23:38)", "(Politik, 23:16)")

这里我刚刚重新创建了一个数据样本,现在是:

> scraped
[1] "(Wirtschaft, 00:00)" "(Kultur, 23:42)"    
[3] "(Sport, 23:38)"      "(Politik, 23:16)"

现在我正在创建一个函数,它将删除此向量中每个元素的括号和逗号:

# Create a function to clean each element of the vector
clean <- function(x) {
  # Replace brackets with blank strings
  no_brackets <- gsub("[()]", "", x)
  # Split the string at the comma
  split <- strsplit(no_brackets, ", ")[[1]]
  return(split)
}

您可以在矢量的单个元素上看到它是如何工作的:

> clean(scraped[1])
[1] "Wirtschaft" "00:00"

它取"(Wirtschaft, 00:00)"并将一个元素分成两个,同时删除括号和逗号。

接下来,我使用函数scraped将此函数应用于sapply的每个元素:

# Apply the clean function to each element of your vector
mat <- sapply(scraped, clean)

现在我们有一个矩阵:

> mat
     (Wirtschaft, 00:00) (Kultur, 23:42) (Sport, 23:38) (Politik, 23:16)
[1,] "Wirtschaft"        "Kultur"        "Sport"        "Politik"       
[2,] "00:00"             "23:42"         "23:38"        "23:16"

所以现在这是一种行和列格式。然而,在同一列中具有相同类型的变量更为常见,并且每一个观察由一行说明,即另一个向上。将它们放在名为data.frame而不是matrix的数据结构中也更有用。因此,在最后一步中,我将使用t函数转置矩阵,并将其转换为具有data.frame函数的数据框:

# Transpose the matrix and convert it to a data.frame
df <- data.frame(t(mat), stringsAsFactors=FALSE)

现在数据集是一个如下所示的data.frame:

> df
                            X1    X2
(Wirtschaft, 00:00) Wirtschaft 00:00
(Kultur, 23:42)         Kultur 23:42
(Sport, 23:38)           Sport 23:38
(Politik, 23:16)       Politik 23:16

您可以使用语法df[row, column]访问data.frame中的不同值:

> df[1, 1]  # The first row and first column of df
[1] "Wirtschaft"
> df[3, 2]  # The third row and second column of df
[1] "23:38"