ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

R中的.csv数据操作而不是python

2019-08-23 23:08:41  阅读:166  来源: 互联网

标签:python r csv


我有一个简单的.csv格式数据,需要先进行操作才能创建符合此数据的绘图.但是,我理解如何从python中操作.csv格式数据.我想在R中应用相同的逻辑,但我不知道如何做到这一点.

下面是来自.csv文件的示例数据,但加载到R.我已经为我们创建了代码来讨论这个问题.

df <- data.frame(Name = c("AC", "AC", "PT", "PT", "OR", "OR"),
    useless_column = c("","","A",3,4," "),
  measurement = c("H", "", "K", "M", "", "H"),
  amount = c(12, 54, 20, 87, 75, 22),
    useless_column = c("","","A",3,4," ")) 

在python中,我通常会这样做:

import csv
import os
import glob
import sys
fileList = glob.glob("R:xxxxxxxxxxxxxxxxxxxxx\*.csv")
for inputFile in fileList:
        outputFilename = inputFile + "output.csv"
        csvInput = csv.reader(open(inputFile,'r'),delimiter=",")
        outputFile = open(outputFilename,'w')
        outputFile.write("Name,measurement,amount\n")
        csvInput.next()
        for line in csvInput:
            if line[2] == "H":
               meas = "100"
            elif line[2] == "K":
               meas = "1000"
            elif line[2] == "M":
               meas = "1000000"
            else:
               meas = "1"
            amount = int(meas) * line[3]

            outputFile.write(",".join(line[0],line[2],amount+"\n"]))
outputFile.close()

在python中,我可以加载csv然后使用for循环来识别csv文件中的每一行.然后在继续我的分析之前定制我的输出文件.从上面,我希望我的输出类似于下面的代码是R格式:

    df <- data.frame(Name = c("AC", "AC", "PT", "PT", "OR", "OR"),
  measurment = c("H", "", "K", "M", "", "H"),
  amount = c(1200, 54, 20000, 87000000, 75, 2200))

我想知道在R中这样做吗?我有一个小的R代码,任何人都可以引导我进入正确的方向:

x <- read.csv("xxxx.csv", header=T,sep=",")
xC = ncol(x)
xR = nrow(x)
op = data.frame(matrix(data = x, nrow= xR, ncol=3,byrow=T))
for (x in :xC)
{
    for (r in 1:xR)
    {
    xxxxxxxx

    }

解决方法:

在R中调整python代码意味着放弃循环以支持向量化操作.在这里,我们可以根据命名向量创建meas,然后计算金额:

# dictionnary of measurement values:
m <- c(H = 100, K = 1000, M = 1000000)

# create meas based on measurement
df$meas <- m[df$measurment]
df$meas[is.na(df$meas)] <- 1
# compute amount
df$amount <- df$meas * df$amount

数据

df <- data.frame(Name = c("AC", "AC", "PT", "PT", "OR", "OR"),
                 measurment = c("H", "", "K", "M", "", "H"),
                 amount = c(1200, 54, 20000, 87000000, 75, 2200))

标签:python,r,csv
来源: https://codeday.me/bug/20190823/1702099.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有