小编bil*_*999的帖子

如何将 lapply 中的新值分配给列表中数据帧中的新列

我有一个数据框列表。我想对数据帧的列执行操作,然后使用生成的新列在数据帧中创建一个新列。

a <- data.frame(c(1,2,3), c(2,3,4))
b <- data.frame(c(7,8,9), c(5,6,2))
l <- list(a, b)
lapply(l, function(x) x[,2]*2)
Run Code Online (Sandbox Code Playgroud)

我想要的是4 6 810 12 4分别分配给第一个和第二个数据帧的第三列。

这似乎不起作用:

lapply(l, function(x) x[,2]*2 -> x$new)
Run Code Online (Sandbox Code Playgroud)

r lapply dataframe

5
推荐指数
1
解决办法
6078
查看次数

情节不适用于循环

我需要制作一堆单独的图并希望在for循环中完成此操作.我正在使用ggplot2.我只是使用facet选项,如果它可以将每个图形保存在一个单独的文件中,我认为它不能做.

由于图表未保存到文件中,因此会发生一些事情.但是生成了文件,但这些文件都是空的.这是我的代码的样子:

for(i in 1:15) {    
pdf(paste("path/plot", i, ".pdf", sep=""), width=4, height=4)

abc <- ggplot(data[data[,3]==i,], 
              aes(variable, value, group=Name, color=Name)) + 
  geom_point(alpha=.6, size=3)+geom_line() + 
  theme(legend.position="none", axis.text.x = element_text(angle = -330)) + 
  geom_text(aes(label=Name),hjust=0, vjust=0, size=2.5) + 
  ggtitle("Title")

abc

dev.off()
}
Run Code Online (Sandbox Code Playgroud)

如何将图表保存到这些文件中?

请注意,如果我有一个数值并且我在for循环中运行代码,那么一切正常.

pdf plot for-loop r ggplot2

5
推荐指数
2
解决办法
7979
查看次数

如何使用多核使 gganimate 更快

我的问题是如何利用 iMac 的多个核心来使 gganimate 运行得更快。还有另一个问题(更多链接在下面)询问同样的事情\xe2\x80\x94我的问题是关于这个问题的答案加速 gganimate Rendering

\n

在该答案中,Roman 和 mhovd 指出了此GitHub 评论中的一个示例(另请参阅此 GitHub 帖子):

\n
library(gganimate)\nlibrary(future)\n\nanim <- ggplot(mtcars, aes(mpg, disp)) +\n  transition_states(gear, transition_length = 2, state_length = 1) +\n  enter_fade() +\n  exit_fade()\n\nfuture::plan("sequential")  ## default\nt0 <- system.time(animate(anim))\nprint(t0)\n\nfuture::plan("multiprocess", workers = 4L)\nt1 <- system.time(animate(anim))\nprint(t1)\n
Run Code Online (Sandbox Code Playgroud)\n

我已经尝试过这个,但得到的时间彼此非常接近:

\n
     user    system   elapsed \n1.0041475 0.9775679 0.9995509 \n
Run Code Online (Sandbox Code Playgroud)\n

除了这段代码之外,我还需要做些什么吗?根据上述 StackOverflow 答案或 GitHub 页面,我无法判断这段代码是否应该按原样工作,或者是否在幕后进行了其他修改。

\n

如果有帮助的话,我正在使用配备 8 核 Intel 处理器的 iMac。我也在 R 中运行它,因为 RStudio 说了一些关于它不支持多核的内容。

\n

另请注意,我的问题也广泛涉及这三个过去的问题:

\n …

parallel-processing macos r ggplot2 gganimate

5
推荐指数
1
解决办法
841
查看次数

如何使用 rowwise 进行并行处理

我用来rowwise在每一行上执行一个函数。这需要很长时间。为了加快速度,有没有办法使用并行处理,以便多个核心同时处理不同的行?

例如,我将 PRISM 天气数据 ( https://prism.oregonstate.edu/ ) 聚合到州一级,同时按人口进行加权。这是基于https://www.patrickbaylis.com/blog/2021-08-15-pop-weighted-weather/

请注意,下面的代码需要下载每日天气数据以及具有非常小的地理区域人口估计值的 shapefile。

library(prism)
library(tidyverse) 
library(sf)
library(exactextractr)
library(tigris)
library(terra)
library(raster)
library(ggthemes)

################################################################################
#get daily PRISM data
prism_set_dl_dir("/prism/daily/")
get_prism_dailys(type = "tmean", minDate = "2012-01-01", maxDate = "2021-07-31", keepZip=FALSE) 

Get states shape file and limit to lower 48    
states = tigris::states(cb = TRUE, resolution = "20m") %>%
    filter(!NAME %in% c("Alaska", "Hawaii", "Puerto Rico"))

setwd("/prism/daily")

################################################################################
#get list of files in the directory, and extract date
##see if it is stable (TRUE) …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r multiprocessing tidyverse rowwise

5
推荐指数
1
解决办法
834
查看次数

使用照片或图形以及循环和合并在Qualtrics中进行随机化

我正在Qualtrics创建一个包含许多照片的调查,比如1000.我想让每个调查参与者回答,比如6,每张照片的问题.每位参与者将看到5张随机分配的照片.

在研究之前,我假设有一种方法可以上传1000张照片,在Qualtrics中创建一个块(带有6个问题),然后简单地随机化出现的照片并将其重复5次.

但似乎这不可能或不明显.我打电话给Qualtrics,他们说我会手动创建1000个块(除了标题和照片之外,每个块都是完全相同的).然后我需要进入Survey Flow并在那里使用Randomizer并手动添加所有1000个块并让它随机呈现5个元素.

我真的希望有更好的方法.如果我必须这样做,这将花费大量时间.

如果没有,有什么方法可以自动化任何东西吗?

  1. 创建新块并自动填充照片.我知道python并且可能会编写一个脚本来生成块,但是照片名称会从其原始名称更改为Qualtrics生成的一些复杂代码.
  2. 将照片一次性加载到Qualtrics中(目前需要一张照片一次加载一张照片).

random graphics survey photo qualtrics

4
推荐指数
1
解决办法
4414
查看次数

Python-在本地保存请求或BeautifulSoup对象

我有一些很长的代码,因此需要很长时间才能运行。我只想在本地保存请求对象(在这种情况下为“ name”)或BeautifulSoup对象(在这种情况下为“ soup”),以便下次可以节省时间。这是代码:

from bs4 import BeautifulSoup
import requests

url = 'SOMEURL'
name = requests.get(url)
soup = BeautifulSoup(name.content)
Run Code Online (Sandbox Code Playgroud)

python file beautifulsoup scrape

4
推荐指数
1
解决办法
3170
查看次数

R等价的Stata*

在Stata,如果我有这些变量:var1,var2,var3,var4,var5,和var6,我可以命令其全部选中var*.R有类似的功能吗?

r stata

4
推荐指数
2
解决办法
780
查看次数

如何在ggplot2中抖动线条

假设我有以下数据和情节:

require(reshape2)
require(ggplot2)
data <- data.frame(id=seq(1,9,1), var1=c(10,3,5,7,8,9,4,6,5), var2=c(9,3,5,7,8,9,4,6,5))
data_graph <- melt(data, id="id")
ggplot(data=data_graph, aes(y=value, x=id, group=variable, col=variable)) +
geom_line(size=2) + geom_point() + 
geom_text(aes(label=value), size=5, hjust=-.6, vjust=1.5)
Run Code Online (Sandbox Code Playgroud)

对于几乎整个两条线,都存在重叠。有没有办法以某种方式抖动线条,使它们彼此靠近,但不重叠。还是做点什么才知道有两条线?

plot r graph overlap ggplot2

4
推荐指数
1
解决办法
2931
查看次数

如何按组计算,然后每组只保留一个

说我有这个data.frame, data:

data <- data.frame(val=c(rep(6,10), rep(7, 15), rep(8, 20), rep(9, 25), rep(10, 100), rep(11, 20), rep(12, 15), rep(13, 10)))
data$plus <- data$val + 100
Run Code Online (Sandbox Code Playgroud)

我的目标是创建一个data.frame具有每个频率val和相关plus值的新.

我目前的策略是创建一个表(称为table),然后合并频率.然后只保留每组中的第一个观察:

table <- table(data$val)
df1 <- data.frame(val = as.integer(names(table)[1:length(table)]), N = table[1:length(table)])
df2 <- merge(data, df1)
df3 <- do.call(rbind, by(df2, list(df2$val), FUN=function(x) head(x, 1)))
Run Code Online (Sandbox Code Playgroud)

这有效,但看起来很笨重.

例如,在Stata中,代码将更简单.就像是:

bys val plus: egen max = _N
bys val plus: gen first = _n==1
keep if first==1
Run Code Online (Sandbox Code Playgroud)

有没有办法简化或使R代码更优雅?

merge aggregate r data.table

4
推荐指数
1
解决办法
139
查看次数

如何让gganimate中的点出现而不是过渡

我正在使用 gganimate。假设我有这个 MWE:

library(ggplot2)
library(gganimate)
ggplot(airquality, aes(Day, Temp)) +
    geom_point(color = 'red', size = 1) +
    transition_time(Month) +
    shadow_mark(colour = 'black', size = 0.75)
Run Code Online (Sandbox Code Playgroud)

我有一个问题:如何才能让新点出现而不是从旧点过渡?换句话说,我只想让新点出现在它们的最终位置并且没有过渡。我应该如何修改代码?

plot r ggplot2 gganimate

4
推荐指数
1
解决办法
1439
查看次数