我有一个稀疏数据集,其列数以csv格式变化.以下是文件文本的示例.
12223, University
12227, bridge, Sky
12828, Sunset
13801, Ground
14853, Tranceamerica
14854, San Francisco
15595, shibuya, Shrine
16126, fog, San Francisco
16520, California, ocean, summer, golden gate, beach, San Francisco
Run Code Online (Sandbox Code Playgroud)
我用的时候
read.csv("data.txt", header = F)
Run Code Online (Sandbox Code Playgroud)
R将数据集解释为具有3列,因为大小是从前5行确定的.无论如何强制r将数据放在更多列中?
我有一些非常大的分隔数据文件,我想只处理R中的某些列而不花时间和内存来创建data.frame整个文件.
我所知道的唯一选择是read.table,当我只想要几列或者scan看起来我想要的水平太低时非常浪费.
有没有更好的选择,无论是使用纯R还是调用其他shell脚本来进行列提取,然后在其输出上使用scan或read.table?(这导致了如何调用shell脚本并在R中捕获其输出的问题).
说我有以下R data.frame ZZZ:
( ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8,
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame") )
## not run
n m o
1 1 6 7
2 2 NA 8
3 NA NA 8
Run Code Online (Sandbox Code Playgroud)
我想以矢量的形式知道我有多少非NA.我希望得到的答案是:
2, 1, 3
Run Code Online (Sandbox Code Playgroud)
当我使用命令时length(ZZZ),我得到了3,当然是data.frame中的向量数量,这是一个足够有价值的信息.
我有其他函数在这个data.frame上运行,并以向量的形式给我答案,但是,dang-it,length不会像那样运行.
我有一个文件,其中第一行是标题.标题可以包含空格和#符号(也可能有其他特殊字符).我试图使用read.csv或read.table读取此文件,但它一直让我犯错误:
undefined columns selected
more columns than column names
Run Code Online (Sandbox Code Playgroud)
我的制表符分隔的chromFile文件如下所示:
Chromosome# Chr chr Size UCSC NCBI36/hg18 NCBIBuild36 NCBIBuild37
1 Chr1 chr1 247199719 247249719 247249719 249250621
2 Chr2 chr2 242751149 242951149 242951149 243199373
Run Code Online (Sandbox Code Playgroud)
命令:
chromosomes <- read.csv(chromFile, sep="\t",skip =0, header = TRUE, )
Run Code Online (Sandbox Code Playgroud)
我想首先寻找一种方法来读取文件,而不是替换空格或#与其他可读符号.
我想交织两个相同模式和相同长度的向量.说:
a <- rpois(lambda=3,n=5e5)
b <- rpois(lambda=4,n=5e5)
Run Code Online (Sandbox Code Playgroud)
我想交织或交织这两个向量,以创建一个等价的向量 c(a[1],b[1],a[2],b[2],...,a[length(a)],b[length(b)])
我的第一次尝试是这样的:
sapply(X=rep.int(c(3,4),times=5e5),FUN=rpois,n=1)
Run Code Online (Sandbox Code Playgroud)
但它需要rpois被召唤的次数远远超过需要.
到目前为止,我最好的尝试是将其转换为矩阵并重新转换为向量:
d <- c(rbind(rpois(lambda=3,n=5e5),rpois(lambda=4,n=5e5)))
d <- c(rbind(a,b))
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法去做呢?或者在基地有一个功能R完成同样的事情?
为什么if-else结构和函数ifelse()的行为不同?
mylist <- list(list(a=1, b=2), list(x=10, y=20))
l1 <- ifelse(sum(sapply(mylist, class) != "list")==0, mylist, list(mylist))
l2 <-
if(sum(sapply(mylist, class) != "list") == 0){ # T: all list elements are lists
mylist
} else {
list(mylist)
}
all.equal(l1,l2)
# [1] "Length mismatch: comparison on first 1 components"
Run Code Online (Sandbox Code Playgroud) 相当新的程序员在这里,并为愚蠢的问题提前道歉.
我int在程序中有一个变量,用于确定我的某些结构中数组的长度.我以前把它放在我的标题中const int.现在,我想分叉我的程序,根据给定的参数给变量赋予不同的值,但在运行时分配后保持只读.
我必须做的一些想法.有首选方式吗?
const int *在我的标题中声明一个并将其分配给const int我的主函数,但这看起来很笨拙.int在我的主要功能中使它成为一个简单的.我通常使用数据帧并且可以轻松地为数据框执行此操作,但在我当前的项目中,我需要在表结构中用NA替换所有零.对于以下两个表(一个使用表而另一个使用ftable)如何用NA替换所有零计数?
x <- with(mtcars,table(am, gear, cyl, vs))
x2 <- with(mtcars,ftable(am, gear, cyl, vs))
Run Code Online (Sandbox Code Playgroud) 我正在构建一个R函数来绘制数据表中的几行,我不明白为什么这不起作用?
data = read.table(path, header=TRUE);
plot(data$noop);
lines(data$noop, col="blue");
lines(data$plus, col="green");
Run Code Online (Sandbox Code Playgroud)
我正在从我拥有的文件中读取数据,其格式如下:
noop plus mins
33.3 33.3 33.3
30.0 40.0 30.0
25.0 50.0 25.0
Run Code Online (Sandbox Code Playgroud)
这是数据集的最小表示,包含更多标题和更多数据点.因此,该数据集的每一行都反映了在给定时间采集的样本.所以我的目标是从文件中读取这些数据,然后将每列绘制为由不同颜色的线连接的一系列点.
我目前使用的方法只是绘制1行,而不是多行.
好吧所以这里是一个微妙的"怪癖"在r as.Date函数转换为带有时区的POSIXct,我想知道它是否是一个bug.
> as.POSIXct("2013-03-29", tz = "Europe/London")
[1] "2013-03-29 GMT"
> as.Date(as.POSIXct("2013-03-29", tz = "Europe/London"))
[1] "2013-03-29"
Run Code Online (Sandbox Code Playgroud)
到目前为止没有问题,但.....
> as.POSIXct("2013-04-01", tz = "Europe/London")
[1] "2013-04-01 BST"
> as.Date(as.POSIXct("2013-04-01", tz = "Europe/London"))
[1] "2013-03-31"
Run Code Online (Sandbox Code Playgroud)
有谁见过这个?这是一个错误还是另一个怪癖?愚人节?