【发布时间】:2016-03-08 16:18:47
【问题描述】:
我正在使用将 csv 加载到数据框中
str <- readLines("Messages.csv", n=-1, skipNul=TRUE)
matches <- str_match(str, pattern = "\\s*([0-9]{2}/[0-9]{2}/[0-9]{4}),\\s*([0-9]{2}:[0-9]{2}:[0-9]{2}),\\s*(Me|Them),\\s*(\\+[0-9]{11,12}),\\s*((?s).*)")
df <- data.frame(matches[, -1], stringsAsFactors=F)
colnames(df) <- c("date","time","sender","phone number","msg")
# Format the date and create a row with the number of characters of the messages
df <- df %>%
mutate(posix.date=parse_date_time(paste0(date,time),"%d%m%y%H%M%S"),tz="Europe/London") %>%
mutate(nb.char = nchar(msg)) %>%
select(posix.date, sender, msg, nb.char) %>%
arrange(as.numeric(posix.date))
我可以使用更改发件人姓名
# Change the senders' names
df <- df %>%
mutate(sender = replace(sender, sender == "Me", "Mr. Awesome"))
但我想将数据的时区从 tz="America/Los_Angeles"
我尝试了以下两种方法都没有成功:
attributes(df)$tz<-"America/Los_Angeles"
这可以编译,但似乎没有任何改变
还有这个:
df <- df %>%
mutate(date = replace(date, format(date, tz="America/Los_Angeles",usetz=TRUE)))
这给出了错误:“eval(expr, envir, enclos) 中的错误:缺少参数“values”,没有默认值”
也许我没有正确指定原始时区,但我真的不知道如何检查它是否通过。
谢谢!
【问题讨论】:
-
你不使用
read.csv()有什么原因吗? -
我应该补充一点,我是 r 的新手,这里的代码基础来自这篇博文,所以大多数功能决策不是我自己的。 iwoaf.com/data-of-long-distance-lovers
-
我认为原因是数据帧中的条目之一是消息,这些可以包含逗号,因此使用 read.csv 会分解消息并错误地解析。使用 readlines 也不是很理想,因为有些消息有 \n 换行符,但这样的数量较少。