编写for循环以自动创建r中的数据集子集

时间:2017-08-07 09:14:41

标签: r function loops for-loop

请帮助我,因为我是R的新手,也是编程

我正在尝试编写一个循环,以便它应该读取每1000行的数据并在r中创建数据集

以下是我的试用

xml

其中<data> <variable name="listItems" type="xxx.xx.models.FieldStudyList" /> </data> <android.support.v7.widget.CardView android:id="@+id/card_lstItemStart" android:layout_width="match_parent" android:layout_height="wrap_content" card_view:cardCornerRadius="7dp" card_view:cardElevation="7dp" card_view:cardMaxElevation="7dp" card_view:contentPadding="0dp"> <TextView android:id="@+id/txtTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{listItems.result.iterator() ???}"<=== I can't show title here ? android:textSize="20sp" /> </android.support.v7.widget.CardView> 是一个整数,等于数据长度for(i in 0:nl){ df[i] = fread('RM.csv',skip = 1000*i, nrows =1000, col.names = colnames(read.csv('RM.csv', nrow=1, header = T))) }

我要做的是创建一个函数,它将跳过每1000行并读取下一行1000,并在达到nl时终止,这是原始数据的长度。

现在不一定只使用这种方法。

1 个答案:

答案 0 :(得分:2)

您可以尝试将整个文件读入一个数据框,然后对您不想要的行进行子集化:

df <- read.csv('RM.csv', header=TRUE)
y <- seq(from = 0, to = 100000, by = 1)     # replace the 'to' value with a value
seq.keep <- y[floor(y / 1000) %% 2 == 0]    # large enough for the whole file
df.keep <- df[seq.keep, ]

这是一个相当混乱的演示,它表明上面的序列逻辑是正确的:

Demo

您可以检查生成的序列是:

0-999
2000-2999
4000-4999
etc.

如代码注释中所述,请确保生成足够大的序列以容纳数据框的实际大小。

如果您需要继续使用当前的方法,那么请尝试仅读取其他所有1000行,例如

sq <- seq(from=0, to=nl, by=2)
names <- colnames(read.csv('RM.csv', nrow=1, header=TRUE))
for(i in sq) {
    df_i <- fread('RM.csv', skip=1000*i, nrows=1000, col.names=names)
    # process this chunk and move on
}