从df获取列名并查询df

时间:2016-01-02 16:38:53

标签: r

当我这样做时:

using System;
using System.Windows.Forms;

namespace AutoTweet
{
    public interface ILogger
    {
        void Log(string text);

        void SetListViewReference(ListView listview);
    }

    public class ListViewLogger : ILogger
    {
        private ListView _lvLog;

        public void Log(string text)
        {
            _lvLog?.Items.Add(makeLvi(text));
        }

        public void SetListViewReference(ListView listview)
        {
            _lvLog = listview;
        }

        private ListViewItem makeLvi(string text)
        {
            ListViewItem ret = new ListViewItem { Text = DateTime.Now.ToString() };
            ret.SubItems.Add(text);
            return ret;
        }
    }
}

我得到var = names(df)[2] df$var 。我认为var是引号内的字符串,这就是为什么会发生这种情况。如何获取数据框中的列并动态查询它们?

有人建议我使用df [var],但如果我的数据帧中有另一个数据帧怎么办? df [var] [x]或df [var] $ x不会工作。

2 个答案:

答案 0 :(得分:4)

通过执行以下操作,按变量值获取列表中数据框或项目的列:

df[[var]]

答案 1 :(得分:2)

很难知道在没有数据帧的输出输出的情况下构造了什么错误导致的情况。获取列名称是非常困难的(在列名中有实际引号,但它可能。首先我们可以尝试并且无法获得这样的野兽:

df2 <- data.frame("\"col1\""=1:10)
df2[["\"col1\""]]
#NULL
df2
#    the data.frame function coerced it to a valid column name with no quotes
   X.col1.
1        1
2        2
3        3
4        4
5        5
6        6
7        7
8        8
9        9
10      10

所以我们可以绕过有效性检查。现在我们需要在引号之前转义:

df2 <- data.frame("\"col1\""=1:10, check.names=FALSE)
> df2[["\"col1\""]]
 [1]  1  2  3  4  5  6  7  8  9 10

如果df[[var]]$x方法适合您,那么答案更可能是df不是数据帧,而是普通的R命名列表,而xstr(df) 数据帧。你应该这样做:

> df3 <- list( item=data.frame(x=1:10, check.names=FALSE))
> var1 = "item"
> df3[[var1]]$x
 [1]  1  2  3  4  5  6  7  8  9 10
>  str(df3)
List of 1
 $ item:'data.frame':   10 obs. of  1 variable:
  ..$ x: int [1:10] 1 2 3 4 5 6 7 8 9 10

您可以通过以下方式简单地构建这样的结构:

constant initial_LIST : T_VECTOR := ((8, 32), (8, 20), (8, 36));
constant LIST : T_VECTOR(initial_LIST'range) := initial_LIST ;