仅选择特定的CSV列

时间:2015-12-03 21:34:01

标签: r csv

说我有一个带有以下标题的csv(当然也有一些真实的内容):

a1,a2,b1,a3,c1,b2

如何仅选择特定列,例如以a开头的列?

所以我只有以下标题

a1,a2,a3

使用此我可以指定范围,但我想要的列不是连续的:

myColumns = csv[c(1:3)]

3 个答案:

答案 0 :(得分:9)

myColumns = csv[,c("a1", "a2", "a3")]

获取您正好的那些列。如果要选择所有以开头(编辑)的列:

csv[,grep("^a", names(myColumns))]

答案 1 :(得分:5)

如果您想直接从csv文件中将选定列读入R而不读取整个文件,可以使用library(data.table) fread(file, select = grep("^a", names(fread(file, nrow = 0L)))) 尝试此方法。

grep()

这只读取文件的第一行(标题),然后使用a确定以select开头的值的位置。然后我们在列选择参数mtcars中使用该结果来获取我们想要的列。

让我们使用d进行试用,只查找以## write mtcars to file write.csv(mtcars, row.names = FALSE, quote = FALSE, file = "mtcars.csv") ## now read only the columns beginning with 'd' DT <- fread("mtcars.csv", select = grep("^d", names(fread("mtcars.csv", nrow = 0L)))) ## have a look head(DT) # disp drat # 1: 160 3.90 # 2: 160 3.90 # 3: 108 3.85 # 4: 258 3.08 # 5: 360 3.15 # 6: 225 2.76 开头的列。

class GumballMachine
  attr_reader :coins, :gumballs

  def initialize
    @coins = 0
    @gumballs = 10
    super
  end

  def dispense_gumball
    @coins += 1
    @gumballs -= 1
    [:red, :green, :blue, :purple, :pink].sample
  end

  state_machine :state, initial: :ready do
    event :insert_coin { transition :ready => :holding_coin }

    event :request_refund { transition :holding_coin => :ready }

    event :turn_crank do
      dispense_gumball if @gumballs > 0
      transition :holding_coin => :ready
    end
  end
end

答案 2 :(得分:0)

这样的事情:

> a1 <- c(0, 1, 2)
> a2 <- c(3, 4, 5)
> a3 <- c(6, 7, 8)
> csv <- data.frame(a1, a2, a3)
> csv
  a1 a2 a3
1  0  3  6
2  1  4  7
3  2  5  8
> csv[,c("a1", "a3")]
  a1 a3
1  0  6
2  1  7
3  2  8