Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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 如何在写入已删除数据的csv文件时拆分项目名称_R_Excel_Csv_Web Scraping - Fatal编程技术网

R 如何在写入已删除数据的csv文件时拆分项目名称

R 如何在写入已删除数据的csv文件时拆分项目名称,r,excel,csv,web-scraping,R,Excel,Csv,Web Scraping,我感兴趣的是创建一个csv或类似的Excel兼容文件,其中包含我使用R从web上刮取的数据。到目前为止,我通过以下方式存储数据: require(textreadr) spiegel <- read_html("http://www.spiegel.de/schlagzeilen/") headlines <- html_nodes(spiegel, ".headline-date") mydata <- html_text(headlines) 当我现在使用write.cs

我感兴趣的是创建一个csv或类似的Excel兼容文件,其中包含我使用R从web上刮取的数据。到目前为止,我通过以下方式存储数据:

require(textreadr)
spiegel <- read_html("http://www.spiegel.de/schlagzeilen/")
headlines <- html_nodes(spiegel, ".headline-date")
mydata <- html_text(headlines)

当我现在使用write.csv时,我想创建两个列,第一个列应该包含“Wirtschaft、Sport等”类别,第二个列是time。有人能告诉我在这种情况下具体怎么做吗?

去掉括号,转换成一个TIBLE(其自列将被称为
),然后使用
分离
将其拆分为两列。最后写出来。用文件名替换stdout()

Lines <- c("(Wirtschaft, 00:00)", "(Kultur, 23:42)") # test data

library(dplyr)
library(tidyr)
library(tibble)

Lines %>% 
      gsub("[()]", "", .) %>%
      as.tibble %>%
      separate(value, into = c("Name", "Time"), sep = ", ") %>%
      write.csv(stdout(), row.names = FALSE)

在将
()
替换为空白(
)后,我们可以使用
base R
使用
read.csv
执行此操作

df1 <- read.csv(text = gsub("[()]", "", mydata), header = FALSE,
          col.names = c("Col1", "Col2"), stringsAsFactors = FALSE)
head(df1)
#      Col1   Col2
#1   Kultur  23:42
#2    Sport  23:38
#3  Politik  23:16
#4    Sport  22:29
#5 Panorama  21:56
#6    Sport  21:39

tail(df1)
#          Col1   Col2
#189 einestages  04:26
#190   Panorama  04:26
#191      Sport  04:09
#192    Politik  03:11
#193    Politik  01:56
#194    Politik  00:15

df1已标记。不要标记它,除非它特别涉及IDE,而IDE不是。另外,我们知道哪个包
read\u html()
来自并可以运行您的代码,
require(texteadr)
在您使用非默认包的任何时候。如果标题中有空格,例如“Arts and Literature”(艺术与文学),这似乎很危险?还是逗号?胡说八道。假设只有一个空格可以拆分是草率的,而您只需要在最右边的逗号上拆分。不管数据中有多少空格和逗号,这都是有效的。你是一个出色的程序员,伙计。既然我们可以纠正好代码,为什么还要写坏代码…@smci在这里,我根据
进行了拆分。。你是说如果单词之间有逗号。在这种情况下,
do.call(rbind,lappy(strsplit(mydata,“,\\s(?=\\d)|[()]”,perl=TRUE),“[”,2:3))
在这里,我没有发现这样的情况。一般来说,模式可以是任何东西。如果我们追求它,它将是一个无止境的过程game@smci如果一个人需要在字段内容中处理逗号,我希望问题给出这样一个例子和答案由于问题中显示的格式不太合理,因此字段将用引号括起来。这看起来非常棒!非常感谢。但是,如果我不想只使用两个数据帧,而是使用整个变量(大约200个),我现在不知道如何实现这一点。有人能帮我解决这个问题吗再次感谢。我无法解决它…我已经试了很多次了。我特别不明白的是第一行:为什么要使用c(…)然后我没有得到单独的命令。如果有人能在这里帮助我,我将非常感激。第一行创建了一些样本数据,因为问题没有以可复制的形式提供输入。
c(“A”,“B”)
是长度为2的字符向量,由
“A”
“B”组成
。确保安装了指定的软件包,然后将答案中的代码完全复制到剪贴板上,然后粘贴到R会话中,您应该会看到相同的答案。是的。我会,但我要求的是更多的“观察”.我有大约200个,我真的需要知道如何根据我发布的第一行代码做同样的事情。从变量“mydata”开始就我而言。如果你能帮助我,那就太好了。无论答案中的字符向量
包含2个元素还是200个元素,都可以使用相同的代码。请注意,你的问题将
mydata
显示为字符向量,这就是每个人的答案中使用的。如果你没有发布你想要的内容,那么您可以通过将输入缩减到较小的大小,然后在问题中显示
dput(mydata)
的输出,以确保其具有可复制的形式,其中
mydata
是对象的缩减版本。
"Name","Time"
"Wirtschaft","00:00"
"Kultur","23:42"
df1 <- read.csv(text = gsub("[()]", "", mydata), header = FALSE,
          col.names = c("Col1", "Col2"), stringsAsFactors = FALSE)
head(df1)
#      Col1   Col2
#1   Kultur  23:42
#2    Sport  23:38
#3  Politik  23:16
#4    Sport  22:29
#5 Panorama  21:56
#6    Sport  21:39

tail(df1)
#          Col1   Col2
#189 einestages  04:26
#190   Panorama  04:26
#191      Sport  04:09
#192    Politik  03:11
#193    Politik  01:56
#194    Politik  00:15