小编Kev*_*n M的帖子

R:没有forloop的子数据集和排序大数据

我有97M行的长表.每行包含一个人采取的操作的信息以及该操作的时间戳,格式如下:

actions <- c("walk","sleep", "run","eat")
people <- c("John","Paul","Ringo","George")
timespan <- seq(1000,2000,1)

set.seed(28100)
df.in <- data.frame(who = sample(people, 10, replace=TRUE),
                    what = sample(actions, 10, replace=TRUE),
                    when = sample(timespan, 10, replace=TRUE))

df.in
#       who  what when
# 1    Paul   eat 1834
# 2    Paul sleep 1295
# 3    Paul   eat 1312
# 4   Ringo   eat 1635
# 5    John sleep 1424
# 6  George   run 1092
# 7    Paul  walk 1849
# 8    John   run 1854
# 9  George sleep 1036
# …
Run Code Online (Sandbox Code Playgroud)

for-loop r split-apply-combine dplyr data.table

3
推荐指数
1
解决办法
152
查看次数

扩展ggplot2中日期的轴范围

我正在绘制许多时间序列图,并且需要具有一致的 x 值范围(日期)来比较这些图。我尝试使用expand_limits,但没有用。修复它的最佳方法是什么?我应该使用continuous_scale吗?

这会产生不同的范围:

library(ggplot2)

#Example Data
ID <- c(rep(1, 3), rep(2, 3))
date1 <- as.Date(c("2015-02-01", "2015-03-01", "2015-04-01", 
    "2015-03-01", "2015-03-15", "2015-03-31"), "%Y-%m-%d")
v1 <- rep(1:3, 2)
df <- data.frame(ID, date1, v1)
df

p1 <- ggplot(df[df$ID == 1,], aes(x = date1, y = v1)) +
    geom_point(size = 3, colour = "#0000FF")

p2 <- ggplot(df[df$ID == 2,], aes(x = date1, y = v1)) +
    geom_point(size = 3, colour = "#0000FF") 

plot(p1)
plot(p2)
Run Code Online (Sandbox Code Playgroud)

这就是我试图修复它的方式:

p2 <- ggplot(df[df$ID == 2,], …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

2
推荐指数
1
解决办法
1536
查看次数

在 R XML Xpath 中,@href 返回文本“href”

我正在尝试获取href使用 Xpath 代码的内容,如这两篇 文章中所述。不幸的是,除了 URL 之外,代码还返回了实际的文本“href”和几个空格。我怎样才能避免这种情况?

library(XML)

html <- readLines("http://www.msu.edu")
html.parse <- htmlParse(html)
Node <- getNodeSet(html.parse, "//div[@id='MSU-top-utilities']//a/@href")
Node[[1]]

# > Node[[1]]
#                  href 
# "students/index.html" 
# attr(,"class")
# [1] "XMLAttributeValue"
Run Code Online (Sandbox Code Playgroud)

xml xpath r

2
推荐指数
1
解决办法
799
查看次数

从数据帧中按组查找最高十分位数

我试图使用函数创建新变量,lapply而不是使用循环在数据中正常工作.我曾经使用Stata,并且会用类似于此处讨论的方法解决这个问题.

由于在R中以编程方式命名变量是如此困难或至少是尴尬(并且似乎你不能使用索引assign),我已经将命名过程留到了之后lapply.然后我使用for循环在合并之前进行重命名,然后再用于合并.有更有效的方法吗?我该如何更换循环?我应该做某种重塑吗?

#Reproducible data
data <- data.frame("custID" = c(1:10, 1:20),
    "v1" = rep(c("A", "B"), c(10,20)), 
    "v2" = c(30:21, 20:19, 1:3, 20:6), stringsAsFactors = TRUE)

#Function to analyze customer distribution for each category (v1)
pf <- function(cat, df) {

        df <- df[df$v1 == cat,]
        df <- df[order(-df$v2),]

    #Divide the customers into top percents
    nr <- nrow(df)
    p10 <- round(nr * .10, 0)
    cat("Number of people in the Top 10% :", p10, …
Run Code Online (Sandbox Code Playgroud)

r rank quantile dataframe split-apply-combine

1
推荐指数
2
解决办法
844
查看次数