只是一个简单的问题.有没有办法使用read.csv从大文件导入每个第N行:
例如,一个50-60万行文件,你只需要从第2行开始的每第4行.
我想过可能会加入'seq'功能,但我不确定这是否可行.
有什么建议?
所以我是R的新手(我来自Python背景),我仍然有一些问题,了解如何/何时实现apply函数(lapply,sapply,rapply等)而不是嵌套循环.
例如,假设您想要执行一些函数FUN,它将列表的每个元素与另一个列表的每个元素进行比较.我会写一些类似的东西:
n = 1
m = 1
sameList = NULL
for(i in 1:length(list1)){
for(j in 1:length(list2)){
if(list1[n]==list2[m]){
sameList<-c(sameList, list1[n]}
n = n+1
}
m = m+1
}
Run Code Online (Sandbox Code Playgroud)
换句话说,一些嵌套循环遍历每个列表的每个元素.
我正在学习的是,在循环中连接列表是R中非常低效的过程,这就是使用的原因apply.
那么如何apply(或任何版本的)用于替换上面的示例代码?
所以我将数据帧转换为 as.matrix(df):
m<-as.matrix(df)
Run Code Online (Sandbox Code Playgroud)
但是之后:
> is.numeric(m)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我什至试图看看矩阵中的某个单一因素是否是数字:
> is.numeric(m[15,15])
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
还有其他人发生过这种情况吗?
好的,所以我不久前发布了一个关于编写 R 函数来加速大文本文件的字符串匹配的问题。我对“data.table”睁大了眼睛,我的问题得到了完美的回答。
这是该线程的链接,其中包含所有数据和详细信息:
但现在我遇到了另一个问题。有时,由于人为错误,提交的 VIN#s(在“vinDB”文件中)与“carFile”文件中的一两个字符不同,因为他们在 DMV 填写汽车信息时出现了人为错误。有没有办法编辑
dt[J(car.vins), list(NumTimesFound=.N), by=vin.names]
Run Code Online (Sandbox Code Playgroud)
该代码行(由上面链接中的@BrodieG 提供)以允许识别相差一两个字符的 VIN#?
如果这是一个简单的更正,我深表歉意。R 中“data.table”包的强大功能让我不知所措,我很想尽可能多地了解它的实用性,而且该论坛知识渊博的成员对我来说绝对是至关重要的。
**编辑:
所以我一直在按照建议使用“lapply”和“agrep”函数,我一定是做错了什么:
我尝试更换这一行:
dt[J(car.vins), list(NumTimesFound=.N), by=vin.names]
Run Code Online (Sandbox Code Playgroud)
有了这个:
dt <- dt[lapply(vin.vins, function(x) agrep(x,car.vins, max.distance=2)), list(NumTimesFound=.N), vin.names, allow.cartesian=TRUE]
Run Code Online (Sandbox Code Playgroud)
但得到以下错误:
Error in `[.data.table`(dt, lapply(vin.vins, function(x) agrep(x,car.vins, :
x.'vin.vins' is a character column being joined to i.'V1' which is type 'integer'.
Character columns must join to factor or character columns.
Run Code Online (Sandbox Code Playgroud)
但它们都是“chr”类型。有谁知道为什么我会收到这个错误?我是否以正确的方式思考这个问题,即:我在这里正确使用 lapply 吗?
谢谢!
我需要一些帮助来解决R中agrep包的具体参数.
就成本而言,所有,插入,删除和取代均具有"取代的最大数量/分数"整数或分数输入参数.
我已阅读有关它的文档,但我仍然无法弄清楚一些细节:
对不起,如果这是相当基本的,但就像我说的,我读过的文档有点令人困惑.
提前致谢
我有一个数据框列,看起来像这样:
>df[,2]
A
10
10.1
10a
10a.1
12a.6
13b
17
3c.3
Run Code Online (Sandbox Code Playgroud)
除了列大约70,000行.我想查找并删除仅出现在列中因子末尾的所有小数.
基本上,我如何正确实现'grep()'或'gsub()'函数?
我有性能问题需要帮助。请耐心等待我的解释:
我有一个已知汽车 Vin# 和年份的数据库(为方便起见,仅显示前 4 行 ~5,000 行):
>vinDB
>ToyotaCarola 2008
IJDINJNDJIJKNDJIMKDK0897
NissanAltima 1998
LJIODJJNJDJNJDNJNJDJ7765
Run Code Online (Sandbox Code Playgroud)
我还有一个 .txt 文档,其中通过以下方式显示了唯一的 DMV ID、车辆识别号和参考号(为方便起见,仅显示了 4 行约 5500 万行):
>carFile
>#DMVcorrNumber33:1245638:563892:6378
IJDINJNDJIJKNDJIMKDK0897
+
VIN#IDref6388546
#DMVcorrNumber33:1245638:563892:6378
LJIODJJNJDJNJDNJNJDJ7765
+
VIN#IDref2453663
Run Code Online (Sandbox Code Playgroud)
我想要做的是扫描“vinDB”文件中的每隔一行(VIN#)与“carFile”文件中的每隔四行(从第二行开始)进行完美匹配。如果匹配存在,我想输出汽车的名称,以及它在“carFile”文件中出现的次数。
所以基本上,我需要这个:
Car Year NumTimesFound
ToyotaCarola 2008 238
NissanAltima 1998 1755
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有以下代码,它适用于截断的“carFile”文件,但当我尝试使用大约 5500 万行时,我的 R 程序崩溃了:
VinCounter<-function(carFile, vinDB)
{
i=1 #index inner while loop
j=1 #index outer while loop
m=2 #index of vinDB, starts at '2' because first VIN# is on line 2
s=2 #index of carFile …Run Code Online (Sandbox Code Playgroud) 对于熟悉"stringdist"软件包的人来说,这是一个问题.
我正在尝试编写一个执行以下操作的函数:
搜索很长的字符列表,例如显示的字符数量只有16个:
> stripList
[1] "AAAAAAAAAAAAAAAAAAAAAAAAAAAADAABAAADCDDAD" "BAAAABBBDACDBABAAADDCBDADBCCBDCDDCDBCDDBA"
[3] "BDDABDCCAAABABBAACADCBDADBCCBDCDDCDBCDDBA" "AADBBACDDDBABDCABAADBCADCBDDDCCC"
[5] "BBCDBBDCCBABDBCABDBBDBDDDADCDDADDDCDDCDDD" "BDDCDACABDCCBACBADCDCBDADBCCBDCDDCDDCDDBA"
[7] "BCDBADCBBDDBBBBDCBDADBCCBDCDDCDBCDDDDAAAA" "DABDDCDACABDCCBACBADC"
[9] "CABABDDCCCCACDCCDCCDADCAAAAAAAAACADADDADA" "BAABCBBBDBCDCDDADDDDCDDADBCCBDCDD"
[11] "BBDDDACDCABDDDBBACDCBDADBCCDDCDDCDDCDDBDD" "BDDABDCCAAABABBBACADCBDADBCCBDCDDCDBCDDBA"
[13] "BDDBBBBDDBDABBACDBDCBDADBCCBDCDD" "BDDABDCCAAABABBBACADCBDADBCCBDCDDCDBCDDBA"
[15] "DABDDCDACABDCCBACBADC" "BBADBACDDBABAACABCABCDCBDADBCCBDCDDCDDDDD"
Run Code Online (Sandbox Code Playgroud)
对于像这样构造的查询序列列表的每个序列的实例.
例如:
SeqName1 # queryNames
BBCDBBDCCBABDBCA # querySeqs
SeqName2 # queryNames
BBBDCCDCCCCDDDCAAACD # querySeqs
Run Code Online (Sandbox Code Playgroud)
我想查看查询序列在我的任何'stripList'中出现多少次(如果有的话)并允许1次插入,1次删除,1次替换和1次转置,并获得如下输出:
>dt
queryNames TimesFound
SeqName1 5
seqName2 145
Run Code Online (Sandbox Code Playgroud)
为此,我使用'stringdist'包的'amatch'功能,方法如下:
dt<-rapply(as.list(querySeqs), function(x) amatch(x, stripList, method = "osa", useBytes = TRUE, weight = c(d = 0.5, i = 0.5, s = 0.9, t = 0.9), maxDist=0.9))
dt<-data.frame(dt)
colnames(dt) <- …Run Code Online (Sandbox Code Playgroud) 所以我试图用rCharts构建一个Shiny应用程序.当我运行以下代码(下面)时,我没有错误,侧边栏面板滚动条显示,但是没有生成条形图本身.(如果我只是从R Studio运行nPlot()函数,它工作正常).
require(rCharts)
require(shiny)
# random data:
smpl<-data.frame(gene = c("gene1","gene2","gene3","gene4","gene5",
"gene6","gene7","gene8","gene9","gene10"),
direction = c("up","down","up","up","up",
"up","up","down","down","down"),
type = c("norm","norm","tum","tum","norm",
"tum","tum","norm","tum","tum"),
foldChange = c(1.3, 0.4, 1.3, 3.0, 1.6,
2.9, 1.3, 0.5, 0.5, 0.6))
shinyServer(function(input, output) {
output$myChart <- renderChart({
n <- subset(smpl, type == input$x)
p1 <- nPlot(foldChange ~ gene, group = "direction", n,
type = 'multiBarChart')
p1$set(dom = 'myChart')
return(p1)
})
})
Run Code Online (Sandbox Code Playgroud)
require(rCharts)
require(shiny)
shinyUI(pageWithSidebar(
headerPanel("Sample Bar Plot"),
sidebarPanel(
selectInput(inputId = "x",
label = "Select:",
choices = c("norm","tum"),
selected …Run Code Online (Sandbox Code Playgroud) 我正在尝试一些数据挖掘并尝试从Twitter检索数据.
当我尝试安装包'twitteR'时,我收到以下警告:
Warning in install.packages :
download of package ‘rjson’ failed
Run Code Online (Sandbox Code Playgroud)
但它加载了其余的包.然后,当我尝试调用库时:
> library(twitteR)
Loading required package: ROAuth
Loading required package: RCurl
Loading required package: bitops
Attaching package: ‘RCurl’
The following object is masked from ‘package:tm.plugin.webmining’:
getURL
Loading required package: digest
Error: package ‘rjson’ required by ‘twitteR’ could not be found
Run Code Online (Sandbox Code Playgroud)
如果它最初无法下载'rjson'软件包,这是有道理的.
当我尝试单独安装'rjson'软件包时,我得到一个熟悉的错误:
> install.packages("rjson")
trying URL 'http://cran.rstudio.com/bin/macosx/contrib/3.0/rjson_0.2.13.tgz'
Warning in install.packages :
cannot open: HTTP status was '404 Not Found'
Error in download.file(url, destfile, method, mode = "wb", ...) : …Run Code Online (Sandbox Code Playgroud) r ×10
string ×4
performance ×3
dataframe ×2
grep ×2
text ×2
agrep ×1
apply ×1
csv ×1
data-mining ×1
data.table ×1
for-loop ×1
gsub ×1
import ×1
match ×1
matrix ×1
nested ×1
rcharts ×1
shiny ×1
shiny-server ×1
stringdist ×1
twitter ×1