我有这个数据框:
x year bucket price
1 2108 2010 7 100000
2 2108 2010 2 95000
3 2108 2010 3 93000
4 2108 2010 14 92000
5 2108 2010 13 91000
6 2108 2010 8 90500
7 2108 2010 10 89000
8 2108 2010 5 88000
9 2108 2010 9 87000
10 2108 2010 11 86000
11 2108 2010 16 85000
12 2108 2010 12 84000
13 2108 2010 1 83000
Run Code Online (Sandbox Code Playgroud)
我是按照价格排列的,但是桶的顺序不对,我想把它们拆下来,变成这样:
x year bucket price
1 2108 2010 7 100000 …Run Code Online (Sandbox Code Playgroud) 考虑data.frame可以说:
df <- data_frame(id = c(1, 1, 2, 2), n = c("100+", "50+", "30+", "40+"))
Run Code Online (Sandbox Code Playgroud)
列n应是转换为c("100","50","30","40")通过使用str_replace()内dplyr库.
我需要这样的东西来工作:
library(dplyr)
library(stringr)
df %>%
mutate(n = str_replace("+",""))
Run Code Online (Sandbox Code Playgroud)
必须有一种适当的方法来str_replace()为具有dplyr的列应用函数.
我在r中有两个数据帧
df1
NO QC1 QC2 QC3 Total
123 8 8 8 24
124 9 8 8 25
125 9 9 9 27
df2
NO QC1 QC2 QC3 Total
123 7 7 7 21
124 9 10 8 27
125 10 10 10 30
Run Code Online (Sandbox Code Playgroud)
我想将上面的数据帧与总数进行比较.将保留最大总数的行.我想要的数据帧如下
NO QC1 QC2 QC3 Total
123 8 8 8 24
124 9 10 8 27
125 10 10 10 30
Run Code Online (Sandbox Code Playgroud)
NO列在两个数据帧中都是唯一的.我怎么能在R?
我有一个巨大的数据帧,在不同的列中有许多负值,应该等于它们的原始值*0.5.我试图应用许多R函数,但似乎我找不到一个函数来处理整个数据帧.我想要以下(不工作)代码片段:
mydf[] <- replace(mydf[], mydf[] < 0, mydf[]*0.5)
Run Code Online (Sandbox Code Playgroud) 我有一个包含一些缺失值的数据框,显示为 NA。
例如:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 4 3 6 7 2 1 2 3 4 1
2 5 5 4 3 2 1 3 7 6 7
3 6 6 NA NA NA NA NA NA NA NA
4 5 2 2 1 7 NA NA NA NA NA
5 7 NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
我想删除包含至少 80% 缺失数据的行。在这个例子中,它显然是第 3 行和第 5 行。我知道如何手动删除行,但我想要一些代码方面的帮助,因为我的原始数据帧包含 480 个变量和 1000 多行,因此是自动识别和删除行的代码>80% NA …
假设我们在开头有两个对象:
a <- c(2,4,6)
b <- 8
Run Code Online (Sandbox Code Playgroud)
如果我们在每个中应用mean()函数,我们得到:
> mean(a)
[1] 4
> mean(b)
[1] 8
Run Code Online (Sandbox Code Playgroud)
......这绝对正常.
如果我创建一个合并a和b的新对象...
c <- c(2,4,6,8)
Run Code Online (Sandbox Code Playgroud)
并计算其平均值......
> mean(c)
[1] 5
Run Code Online (Sandbox Code Playgroud)
...我们得到5,这是预期值.
但是,我想同时计算两个对象的平均值.我试过这种方式:
> mean(a,b)
[1] 4
Run Code Online (Sandbox Code Playgroud)
我们可以看到,它的值与预期的正确值(5)不同.我错过了什么?
我想生成一个dplyr管道中字数统计频率的频率计数摘要.它必须在dplyr管道中,因为我实际上是在查询bigrquery并且它充当dplyr管道.
假设我有这样的数据:
tf1 <- tbl_df(data.frame(row= c(1:5), body=c("tt t ttt j ss oe", "kpw eero", "pow eir sap r", "s", "oe")))
Run Code Online (Sandbox Code Playgroud)
我想得到一个关于字数的总结(类似这样):
n_words freq
1 0 0
2 1 2
3 2 1
4 3 0
5 4 1
6 5 0
7 6 1
Run Code Online (Sandbox Code Playgroud)
但我需要在dplyr管道中执行此操作(类似于下面的操作不起作用)
###NOT WORK
tf1 %>%
wordcount(body,sep=" ", count.function=sum)
Run Code Online (Sandbox Code Playgroud) 我编写了下面的代码来计算给定字符串中回文字符串的数量:
countPalindromes <- function(str){
len <- nchar(str)
count <- 0
for(i in 1:len){
for(j in i:len){
subs <- substr(str, i, j)
rev <- paste(rev(substring(subs, 1:nchar(subs), 1:nchar(subs))), collapse = "")
if(subs == rev){
count <- count + 1
}
}
}
count
}
Run Code Online (Sandbox Code Playgroud)
这实际上工作正常,但代码需要以这样的方式进行优化,以便以更快的速度执行.
请提供一些方法来优化这段代码.
我想要floor()下一个特定数字(不是数字,而是实际值)。例如,对于年份列表:
valid_years = c(1990,2000,2006,2012,2018) # values to round to ("snap")
input = c(1990, 1991, 1992, 1993, 2000, 2001, 2002, 2006, 2007, 2016, 2020)
output = c(1990, 1990, 1990, 1990, 2000, 2000, 2000, 2006, 2006, 2012, 2018)
Run Code Online (Sandbox Code Playgroud)
低于(或在ceil()高于指定值的情况下)输入的行为对我来说并不重要。在我的情况下,一个好的行为是捕捉到 中的最低值valid_years,但这对我来说并不重要。
我知道我可以用 if-then-else (eg if(x < 2006) x = 2000 else if(x < 2012) x = 2006 ...)来实现这一点,但我相信有更优雅的方法来解决这个问题。
我浏览了许多“R 中的舍入”问题,但尽管有许多措辞相似的问题,但都没有找到答案,这些问题都有其独特的(不同)目标:例如,四舍五入到特定的小数步长, 四舍五入到某个范围内的任意数字或条件舍入。
我有一个尺寸统一的清单,如下所示。我想提取键的值。我该怎么做?
我通过使用像这样的names(allsum)地方隔离了钥匙allsum
`$1999
[1] 7332967
$2002
[1] 5635780
$2005
[1] 5454703
$2008
[1] 3464206`
Run Code Online (Sandbox Code Playgroud)
我想要[7332967, 5635780, 5454703, 3464206]作为输出。我尝试过,sapply但是直觉很弱。请帮忙。
for(a in allsum) {
print(a[[1]])
}
Run Code Online (Sandbox Code Playgroud)
我试过了,它可以工作,但是我想知道我们是否可以使用某些功能或不使用任何显式循环。
我尝试使用unlist
以下操作会发生什么
c1 <- unlist(allsum)
#1999 2002 2005 2008
#7332967 5635780 5454703 3464206
Run Code Online (Sandbox Code Playgroud)
我只需要大数目。如何提取?