使用函数修改数据框中的列

时间:2015-04-29 09:59:04

标签: r recursion dataframe read.table

我试图修改我的数据框列和位置。最后我发现了一些解决方案,但我希望在函数中为目录中的所有数据集执行所有处理并覆盖实际数据。

kw <- matrix(1:11400, ncol = 19) # to make sample data
kw <- kw[, !(colnames(kw) %in% c("V18","V19"))]  # to remove last two cols
add <- c(kw$V18 <- 0,kw$V19<- 0)   # add new columns with all zero values
kw$V1 <- kw$V1 * 1000  # to modify first col of data frame
kw <- kw[ ,c(1,18:19,2:17)] # to replace col positions

假设我在目录中有数据集

   kw<-read.table("5LSTT-test10.avgm", header = FALSE,fill=FALSE) # example which shows how I read single data 
  `5LSTT-test10.avgm`
    .  
    .   
    .  
    .

  5LSTT-test10.avgm`

如何将此列修改过程分别应用于每个数据并覆盖或创建新数据?

编辑输出readLines(&#34; 5LSTT-test10.avgm&#34;,n = 1) 你可以看到19列并认为这个数据有600行

[1] "  9.0000E-02  0.0000E+00   2.3075E-03 -6.4467E-03  9.9866E-01   9.8648E-02  4.5981E-02  9.8004E-01   1.2359E-01  6.1175E-02  9.7701E-01   8.6662E-02  3.0034E-02  9.7884E-01   7.0891E-02  8.2247E-03  9.8564E-01  -8.7967E-11  4.3105E-02"

1 个答案:

答案 0 :(得分:3)

使用“data.table”,您可以执行以下操作:

import MySQLdb as mdb
from goose import Goose
import string
import datetime

host = 'rds.amazonaws.com'
user = 'news'
password = 'xxxxxxx'
db_name = 'news_reader'
conn = mdb.connect(host, user, password, db_name)

url = 'http://www.dailymail.co.uk/wires/ap/article-3060183/Andrew-Lesnie-Lord-Rings-cinematographer-dies.html?ITO=1490&ns_mchannel=rss&ns_campaign=1490'
g = Goose()
article = g.extract(url=url)
body = article.cleaned_text
body = body.replace("'","`")
load_date = str(datetime.datetime.now())
summary = article.meta_description
title = article.title
image = article.top_image

sql_load = "insert into articles " \
        "    (title,summary,article,,image,source,load_date) " \
        "     values ('%s','%s','%s','%s','%s','%s');" % \
        (title,summary,body,image,url,load_date)
cursor = conn.cursor()
cursor.execute(sql_load)
#conn.commit()

因此,如果你真的需要一个功能,你可以这样做:

setcolorder(
  fread(yourfile)[, c("V1", "V18", "V19") := list(V1 * 1000, 0, 0)], c(1, 18:19, 2:17))

然后,您可以在myFun <- function(infile) { require(data.table) write.table( setcolorder( fread(infile)[ , c("V1", "V18", "V19") := list(V1 * 1000, 0, 0)], c(1, 18:19, 2:17)), file = gsub("(.*)(\\..*)", "\\1_new\\2", infile), row.names = FALSE) } 中使用myFun覆盖要读取和处理的文件的向量。

换句话说:

lapply

默认情况下,此功能会重命名(而不是覆盖)您在末尾添加“_new”但在扩展名之前的文件。