将data.frames转换为时间序列

时间:2016-07-19 09:38:30

标签: r dataframe time-series type-conversion as.date

我们再来一次,我仍然在上面的问题上撞墙。 我有一个datasframe,我通过csv上传,看起来像:

X          SPY      VTI
01.02.2002 0.0000   0.0000
04.02.2002 -2.4578  -2.4167 
.....
31.12.2015 -1.003   -0.9685

其中X是日期,SPY和VTI是股票收益

我尝试了很多东西来转换成时间序列。首先我试过

spyvti$X <- as.Date(as.character(spyvti$X),format="%d.%m.%Y.")

我得到的是:

 X        SPY     VTI
 NA       0.0000    0.0000
 NA       -2.4856   -2.4167
 .....
 NA       -1.003   -0.9685

所以看起来它不能在类(Date)的对象中转换第一列,这是一个因素。

我还尝试将data.drame分成3个不同的向量,首先将日期向量转换为字符,然后才能工作,然后

date <- as.Date(date, format = "%d.%m.%Y.")
error in charToDate(x):
character string is not in a standard unambiguous format.

所以我想帮助克服日期问题,并且我想知道,当日期问题结束时,创建一个ts对象是否正确

 tsobject <- xts(date,spy)

其中spy是数字。

非常感谢

3 个答案:

答案 0 :(得分:0)

使用“lubridate”包。它使日期的转换变得非常容易。

library(lubridate)
dmy(spyvti$x)

答案 1 :(得分:0)

我正在想起这件事。希望它有效。您可以尝试以下方法:

    public class MainActivity_d3 extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

        //Declaring an Spinner
        private Spinner spinner2, spinner1;
        private String str_spinner1, str_spinner2, s_name, s_course;
        //An ArrayList for Spinner Items

        private ArrayList<String> students1;
        private ArrayList<String> students2;

        Button mBtnSave;

        //JSON Array

        private JSONArray result1, result2, result;

        //TextViews to display details
        private TextView textViewName1;
        private TextView textViewName2;
        private TextView textViewCourse;
        private TextView textViewSession;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mainactivity_d1);

            //Initializing the ArrayList
            students1 = new ArrayList<String>();
            students2 = new ArrayList<String>();

            //Initializing Spinner


            //Adding an Item Selected Listener to our Spinner
            //As we have implemented the class Spinner.OnItemSelectedListener to this class iteself we are passing this to setOnItemSelectedListener


            spinner1 = (Spinner) findViewById(R.id.spinner1);
            spinner2 = (Spinner) findViewById(R.id.spinner2);

            spinner1.setOnItemSelectedListener(this);
            spinner2.setOnItemSelectedListener(this);
            //    spinner1.setOnItemSelectedListener(this);
            mBtnSave=(Button)findViewById(R.id.button2);

            mBtnSave.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    String str_spinner1 = spinner1.getSelectedItem().toString();
                    String str_spinner2 = spinner2.getSelectedItem().toString();

                }
            });

            //Initializing TextViews
            textViewName1 = (TextView) findViewById(R.id.textViewName1);
            textViewName2 = (TextView) findViewById(R.id.textViewName2);
            //      textViewCourse = (TextView) findViewById(R.id.textViewCourse);
            //      textViewSession = (TextView) findViewById(R.id.textViewSession);

            //This method will fetch the data from the URL

            getData1();
            getData2();
        }

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {


          if(spinner1.getId()==R.id.spinner1) {
                str_spinner1 = spinner1.getSelectedItem().toString();
            }
            else if(spinner2.getId()==R.id.spinner2)
            {
                str_spinner2 = spinner2.getSelectedItem().toString();
            }
                  /*    switch (view.getId()){

                case R.id.spinner1:
                    getData1();
                    break;


                case R.id.spinner2:
                    getData2();
                    break;
            }*/
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {


            if (spinner1.getId() == R.id.spinner1) {
                //do this
                textViewName1.setText("");
            } else if (spinner2.getId() == R.id.spinner2) {
                //do this
                textViewName2.setText("");
            }

        }

        private void getData1() {
            //Creating a string request
            StringRequest stringRequest1 = new StringRequest(Config.DATA_URL1,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response1) {
                            JSONObject j1 = null;
                            try {
                                //Parsing the fetched Json String to JSON Object
                                j1 = new JSONObject(response1);

                                //Storing the Array of JSON String to our JSON Array
                                result1 = j1.getJSONArray(Config.JSON_ARRAY1);

                                //Calling method getStudents to get the students from the JSON Array
                                getStudents1(result1);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error1) {

                        }
                    });

            //Creating a request queue
            RequestQueue requestQueue1 = Volley.newRequestQueue(this);

            //Adding request to the queue
            requestQueue1.add(stringRequest1);
        }

        private void getStudents1(JSONArray j1) {
            //Traversing through all the items in the json array
            for (int i = 0; i < j1.length(); i++) {
                try {
                    //Getting json object
                    JSONObject json1 = j1.getJSONObject(i);

                    //Adding the name of the student to array list
                    students1.add(json1.getString(Config.TAG_COURSE));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            //Setting adapter to show the items in the spinner
                   spinner1.setAdapter(new ArrayAdapter<String>(MainActivity_d3.this, android.R.layout.simple_spinner_dropdown_item, students1));
        }

    //Initializing TextViews

    //      textViewCourse = (TextView) findViewById(R.id.textViewCourse);
    //      textViewSession = (TextView) findViewById(R.id.textViewSession);

    //This method will fetch the data from the URL

        private void getData2() {
            //Creating a string request
            StringRequest stringRequest2 = new StringRequest(Config.DATA_URL2,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response2) {
                            JSONObject j2 = null;
                            try {
                                //Parsing the fetched Json String to JSON Object
                                j2 = new JSONObject(response2);

                                //Storing the Array of JSON String to our JSON Array
                                result = j2.getJSONArray(Config.JSON_ARRAY);

                                //Calling method getStudents to get the students from the JSON Array
                                getStudents2(result);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error1) {

                        }
                    });

            //Creating a request queue
            RequestQueue requestQueue2 = Volley.newRequestQueue(this);

            //Adding request to the queue
            requestQueue2.add(stringRequest2);
        }

        private void getStudents2(JSONArray j2) {
            //Traversing through all the items in the json array
            for (int i = 0; i < j2.length(); i++) {
                try {
                    //Getting json object
                    JSONObject json2 = j2.getJSONObject(i);

                    //Adding the name of the student to array list
                    students2.add(json2.getString(Config.TAG_USERNAME));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            //Setting adapter to show the items in the spinner
            spinner2.setAdapter(new ArrayAdapter<String>(MainActivity_d3.this, android.R.layout.simple_spinner_dropdown_item, students2));
        }
    }

答案 2 :(得分:0)

假设您的示例数据框名为df,您可以将其转换为xts时间序列对象,如下所示:

library(xts)
xtsObject <- as.xts(df[,-1],order.by = as.Date(as.character(df[,1]), format = "%d.%m.%Y"))